不使用废弃WebSecurityConfigurerAdapter禁用SecurityContext问题
问题原因
你两次重写配置返回403的问题出在三个地方:
- 第一个
SecurityFilterChain配置只声明了路径匹配规则和SecurityContext禁用逻辑,没有给匹配到的请求配置授权规则,Spring Security默认会拒绝所有未明确配置授权规则的请求,直接返回403。 - 第二个方案不仅还继承了已废弃的
WebSecurityConfigurerAdapter,匹配路径还错写成了/v1/containers/*,和目标路径/my/path/*不匹配,而且WebSecurityCustomizer.ignoring()会让路径完全绕过整个Spring Security过滤器链,和你原本「仅禁用SecurityContext」的需求不一致。 - 只配置单条路径匹配的过滤链时,没有给其余路径提供兜底的安全过滤链,会导致所有非目标路径的安全规则异常。
官方推荐正确配置
你需要定义两条优先级不同的SecurityFilterChain,分别处理目标路径和其余路径的规则,代码如下:
@EnableWebSecurity public class MyWebSecurityConfiguration { // 高优先级处理目标路径:仅禁用SecurityContext,明确放行所有请求 @Bean @Order(Ordered.HIGHEST_PRECEDENCE) public SecurityFilterChain customPathFilterChain(HttpSecurity http) throws Exception { http .mvcMatcher("/my/path/*") .authorizeRequests() .anyRequest().permitAll() .and() .securityContext().disable(); return http.build(); } // 低优先级兜底处理所有其他路径 @Bean public SecurityFilterChain defaultFilterChain(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() // 这里按需补充你项目原本的其他安全配置,比如表单登录、csrf配置、接口权限规则等 ; return http.build(); } }
配置说明
- 多个
SecurityFilterChain必须通过@Order指定执行顺序,匹配范围越小的链优先级越高,避免被兜底链提前拦截。 WebSecurityCustomizer.ignoring()仅适合配置静态资源等完全不需要任何安全处理的路径,如果你只是要关闭某几个过滤器,不要用这个方案,否则会直接绕过所有安全校验逻辑。- 每一条
SecurityFilterChain都必须明确配置authorizeRequests授权规则,否则会触发默认的拒绝访问逻辑返回403。
内容的提问来源于stack exchange,提问作者Alan
相关产品推荐
相关产品推荐

