Angular对接Spring Boot时CSRF Token在Postman可用但Angular失效求助
解决Spring Boot CSRF Token在Angular中失效的问题
核心问题与修复方案
1. 修复Spring Security的CSRF匹配器配置
你多次调用requireCsrfProtectionMatcher,但该方法每次调用会覆盖之前的匹配规则,最终只有最后一条DELETE的规则生效,导致POST/PATCH请求的CSRF校验逻辑异常。
修改SecurityConfig中的CSRF配置部分,用OrRequestMatcher组合所有需要校验的请求规则:
.csrf(csrf -> csrf .requireCsrfProtectionMatcher(new OrRequestMatcher( new AntPathRequestMatcher("/api/v1/**", "POST"), new AntPathRequestMatcher("/api/v1/**", "PATCH"), new AntPathRequestMatcher("/api/v1/**", "DELETE") )) .ignoringRequestMatchers( new AntPathRequestMatcher("/api/v1/csrf", "POST"), new AntPathRequestMatcher("/api/v1/login", "POST") ))
2. 修复Angular的CSRF Token获取请求
Spring Security的CSRF Token与用户会话绑定,你在获取Token的请求中未设置withCredentials: true,导致浏览器不携带会话Cookie到后端,生成的Token与后续请求的会话不匹配,校验失败。
修改Angular中获取CSRF Token的请求,添加会话凭证配置:
this.http .post(csrfUrl, null, { headers: new HttpHeaders({ Authorization: `Bearer ${bearerToken.trim()}`, }), withCredentials: true, // 新增:携带会话Cookie }) .subscribe(...)
额外验证步骤
- 检查浏览器网络请求,确认获取CSRF Token的请求和后续创建产品的请求都携带了相同的
JSESSIONIDCookie - 确认后端
/api/v1/csrf端点返回的Token格式正确,且与当前会话绑定
内容的提问来源于stack exchange,提问作者Davide Balice
相关产品推荐
相关产品推荐

