Spring Boot 3.0.5禁用CSRF仍报CSRF token缺失错误求助
排查Spring Security 6禁用CSRF后仍报Token缺失的问题
可能的原因及排查步骤
1. 存在多个SecurityFilterChain Bean
Spring Security会自动加载所有SecurityFilterChain类型的Bean,如果项目中还有其他未禁用CSRF的安全配置类,会导致部分请求受其规则约束。
- 排查方式:检查项目中是否存在其他标注
@Configuration+@EnableWebSecurity的类;开启Spring Security的DEBUG日志,查看控制台输出的SecurityFilterChain加载详情,确认当前配置是否生效。 - 解决方法:删除多余的安全配置类,或用
@Order注解指定配置的加载优先级。
2. 配置文件覆盖了代码设置
如果application.properties或application.yml中存在spring.security.csrf.enabled=true的配置,会直接覆盖代码里csrf(AbstractHttpConfigurer::disable)的设置。
- 排查方式:搜索配置文件中是否有CSRF相关的启用配置。
- 解决方法:删除该配置项,或设置为
spring.security.csrf.enabled=false。
3. 自定义过滤器中手动校验CSRF Token
检查你的JwtAuthenticationFilter实现,是否在过滤器逻辑中添加了CSRF Token的校验代码。即使全局禁用CSRF,自定义过滤器的手动校验也会触发报错。
- 排查方式:查看
JwtAuthenticationFilter的doFilterInternal方法,确认是否存在CSRF相关的校验逻辑。 - 解决方法:移除过滤器中多余的CSRF校验代码。
4. 请求路径未被当前配置覆盖(次要)
虽然你已全局禁用CSRF,但如果当前SecurityFilterChain未覆盖到注册接口的请求路径,可能会触发默认配置的约束。
- 排查方式:确认注册接口的实际请求路径是否符合
/api/auth/**的规则,比如是否是/api/auth/register而非/api/register。 - 解决方法:调整
requestMatchers的路径规则,确保覆盖目标接口,或保持全局CSRF禁用即可(无需单独配置路径)。
内容的提问来源于stack exchange,提问作者Adrian Valentin
相关产品推荐
相关产品推荐

