При попытке обновить проект весенней загрузки с 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? Или проблема где-то еще?
Большое спасибо и хорошего дня.
Похоже, что проблема совместимости в вашем случае может быть связана с тем, что 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>
@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"));
}
}
хорошего дня - Кевин
Большое спасибо за ваш ответ. Действительно, добавление 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>
Что ж, ответ, который вы дали, возможно, лучше задокументирован, но для моего случая это был неполный ответ. У меня это все еще не сработало. Я приму ваш ответ, так как в общем случае он может быть более полезным, для меня неважно, может ли он сделать ваш день лучше. Спасибо за помощь.
Лично мне кажется, что точный ответ на этот вопрос — мой ответ. Немного разочаровывает то, что вы не выбрали мой ответ, который вы сами приняли, но я уважаю ваш выбор. Хорошего дня.