Spring Boot 2.5.6 без Spring Security и конфигурации безопасности, обновленной до Spring Boot 3, из-за чего swagger не работает

При попытке обновить проект весенней загрузки с 2.5.6 до 3.2.5 пользовательский интерфейс Swagger перестает работать. В версии 2.5.6 у меня нет ни Spring Security, ни конфигурации безопасности. У меня есть только SwaggerConfig:

@Configuration
public class SwaggerConfig {

    @Value("${spring.application.name}")
    private String applicationId;

     @Value("${spring.application.description}")
    private String description;

     @Value("${spring.application.version}")
    private String version;

    @Value("${app.env}")
    private String env;

     @Bean
    public OpenAPI openAPI() {
             return new OpenAPI()
                     .info(apiInfo())
                   .components(new Components());
    }

    private Info apiInfo(){
        Info info= new Info();
            info.setTitle(env + " - " + applicationId);
            info.setDescription(description);
            info.version(version);
        return info;
    }
}

Необходимо ли добавлять Spring Security после обновления до Spring Boot 3.2.5 или мне следует изменить SwaggerConfig? Или проблема где-то еще?

Большое спасибо и хорошего дня.

0
0
92
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Похоже, что проблема совместимости в вашем случае может быть связана с тем, что SpringFox не обновляется с июля 2020 года , а его последняя версия, 3.0.0, поддерживает только Spring Boot 2.0.0.

Возможно, вам придется переключиться на SpringDoc, который совместим с Spring Boot 3.0.0 и более поздних версий.

Это руководство по миграции станет вам большим подспорьем.

Градл

implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.2.0'

Мавен

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.2.0</version>
</dependency>

SwaggerConfig

@Configuration
public class SwaggerConfig {

 @Bean
 public OpenAPI openAPI() {
  return new OpenAPI()
   .info(new Info()
    .title("Title of the API")
    .description("Description of the API.")
    .version("Version of the API"));
 }
}

Ссылки Документы

  1. Spring boot 3 не работает с Springfox 3.0
  2. https://github.com/springfox/springfox/issues/4017
  3. https://www.baeldung.com/spring-rest-openapi-documentation

хорошего дня - Кевин

Большое спасибо за ваш ответ. Действительно, добавление Springdoc-openapi-starter-webmvc-ui было частью решения. Однако даже после этого у меня был интерфейс входа в систему для доступа к Swagger-UI.

Чтобы исправить это и иметь прямой доступ к Swagger, я добавил конфигурацию безопасности:

@Configuration
@RequiredArgsConstructor
@EnableWebSecurity
@EnableMethodSecurity(securedEnabled = true, jsr250Enabled = true)
public class SecurityConfig {
    @Bean
    CorsConfigurationSource corsConfigurationSource() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration().applyPermitDefaultValues();
        corsConfiguration.setAllowedMethods(httpMethods());
        source.registerCorsConfiguration("/**", corsConfiguration);
        return source;
    }

    private static List<String> httpMethods() {
        return List.of(HEAD.name(), GET.name(), POST.name(), PUT.name(), PATCH.name(), DELETE.name(), OPTIONS.name(), TRACE.name());
    }


    @Bean
    protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .cors(AbstractHttpConfigurer::disable)
                .csrf(AbstractHttpConfigurer::disable)
                .exceptionHandling(Customizer.withDefaults())
                .sessionManagement(session -> session
                        .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                )
                .authorizeHttpRequests(authz -> authz
                        .anyRequest().permitAll()
                );

        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

для добавления конфигурации безопасности с помощью Spring boot 3 требуются следующие зависимости Maven:

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-springsecurity6</artifactId>
    <version>3.1.2.RELEASE</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    <version>${project.parent.version}</version>
</dependency>

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-core</artifactId>
    <version>6.2.4</version>
</dependency>

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>6.2.4</version>
</dependency>

Лично мне кажется, что точный ответ на этот вопрос — мой ответ. Немного разочаровывает то, что вы не выбрали мой ответ, который вы сами приняли, но я уважаю ваш выбор. Хорошего дня.

Kevin 14.06.2024 15:42

Что ж, ответ, который вы дали, возможно, лучше задокументирован, но для моего случая это был неполный ответ. У меня это все еще не сработало. Я приму ваш ответ, так как в общем случае он может быть более полезным, для меня неважно, может ли он сделать ваш день лучше. Спасибо за помощь.

arysse 17.06.2024 09:52

Другие вопросы по теме