我目前正在将我们的REST应用程序从Spring Boot 2.7.5迁移到3.0.0-RC2。 我希望除了Open API URL之外,其他所有内容都是安全的。 在Spring Boot 2.7.5中,我们曾经这样做:
@Named
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/openapi/openapi.yml").permitAll()
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
并且它运行良好。在Spring Boot 3中,我不得不将其更改为
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain configure(HttpSecurity http) throws Exception {
http.authorizeHttpRequests((requests) -> requests
.requestMatchers("/openapi/openapi.yml").permitAll()
.anyRequest()
.authenticated())
.httpBasic();
return http.build();
}
}
由于WebSecurityConfigurerAdapter已被移除,代码不再起作用。开放式API URL也通过基本身份验证进行了保护。在升级代码时,我是否犯了错误或者这可能是Spring Boot 3 RC 2的问题?
更新 由于大多数新API已经在2.7.5中可用,因此我已经在我们的2.7.5代码库中将代码更新为以下内容:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeHttpRequests((requests) -> requests
.antMatchers(OPTIONS).permitAll() // allow CORS option calls for Swagger UI
.antMatchers("/openapi/openapi.yml").permitAll()
.anyRequest().authenticated())
.httpBasic();
return http.build();
}
}
在我们的3.0.0-RC2分支中,代码现在如下:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig {
@Bean
public SecurityFilterChain configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeHttpRequests((requests) -> requests
.requestMatchers(OPTIONS).permitAll() // allow CORS option calls for Swagger UI
.requestMatchers("/openapi/openapi.yml").permitAll()
.anyRequest().authenticated())
.httpBasic();
return http.build();
}
}
正如您所看到的,唯一的区别在于我调用了requestMatchers而不是antMatchers。这种方法似乎已被重命名。方法antMatchers不再可用。不过最终效果仍然相同。在我们3.0.0-RC2分支上,Spring Boot要求对OpenAPI URL进行基本身份验证。在2.7.5上仍然可以正常工作。
"/openapi/openapi.yml"
的处理程序(控制器映射)?如果没有处理程序,它将被解析为不是404 NOT_FOUND
。这反过来会重定向到/error
。由于/error
也受到保护,因此它会要求您登录。 - Elyorbek Ibrokhimov