Spring Boot Security配置删除/logout忽略规则后返回403问题咨询
问题原因
- 你没有显式关闭Spring Security默认开启的CSRF防护:对于POST/PUT/DELETE等修改类请求,Spring Security会强制校验请求中携带的CSRF Token,你访问/logout接口通常为POST请求,未携带CSRF Token时会直接被CSRF过滤器拦截返回403,根本不会走到你自定义的Token认证逻辑环节。
- 之前添加
webSecurity.ignoring().antMatchers("/logout/**")时,/logout路径会直接跳过整个Spring Security过滤链,包括CSRF过滤器和你自定义的认证过滤器,所以不会触发CSRF校验,如果你是在Controller层自行实现了Token校验,此时功能可以正常运行,但Security层将/logout加入保护路径的配置会完全失效,这就是冗余配置的来源。 - 你配置了
.logout().disable(),已经禁用了Spring Security默认的注销逻辑,所有注销相关的默认过滤规则都不生效,完全走自定义逻辑。
解决方案
按以下两步修改即可删除冗余配置:
- 在HttpSecurity配置中显式关闭CSRF防护,无状态Token认证架构不需要CSRF防护:
@Override public void configure(HttpSecurity http) throws Exception { http.csrf().disable() // 新增这行关闭CSRF防护 .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .exceptionHandling() .and() .authenticationProvider(provider) .addFilterBefore(authenticationFilter(), AnonymousAuthenticationFilter.class) .authorizeRequests() .requestMatchers(PROTECTED_URLS) .authenticated() .and() .formLogin().disable() .httpBasic().disable() .logout().disable(); }
- 直接删除
webSecurity.ignoring().antMatchers("/logout/**");这行冗余配置即可。
修改完成后/logout路径会正常进入Spring Security过滤链,先经过你自定义的Token认证过滤器校验,校验通过才可访问,完全符合你的预期需求。
内容的提问来源于stack exchange,提问作者Voljega
相关产品推荐
相关产品推荐

