You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBootSecurity CSRF Token在Angular中失效但Postman可用问题排查

SPA应用CSRF防护403错误排查与解决

场景背景

  • 后端基于Spring Security,通过SecurityConfigurator启用默认CSRF防护,同时提供/api/csrf/token接口返回CsrfToken
  • 前端为Angular应用,使用openapi-generator-cli生成接口服务,通过请求拦截器自动为请求添加CSRF Token,核心需求是通过POST请求/api/initSettings完成应用配置初始化

正常测试表现

  • 用Postman调用/api/csrf/token能正常获取Token,手动添加X-CSRF-TOKEN请求头后调用/api/initSettings,返回200 OK
  • Angular应用内也能成功获取CSRF Token,且请求/api/initSettings时确实携带了正确的X-CSRF-TOKEN头

异常问题

Angular应用发起的/api/initSettings请求始终返回403 Forbidden,后端报错:

Invalid CSRF token found for http://localhost:8080/api/initSettings

调试后发现:前端传递的Token和后端tokenRepository中存储的deferredCsrfToken完全不匹配

排查步骤

  1. 最初怀疑后端未将Token正确保存到仓库,但Postman测试正常,排除后端CSRF生成与存储逻辑的问题
  2. 尝试在获取Token后延迟发送请求,问题依然存在,排除异步时序导致的Token未就绪问题

根因与解决

后端会话管理配置为无状态(Stateless),而Spring Security默认的CSRF Token验证机制依赖HTTP会话来关联用户与Token。在无状态模式下,每次请求都是独立的,后端无法通过会话维持Token的上下文关联,导致前后端Token无法匹配验证。

最终解决方案:移除CSRF防护配置。

内容的提问来源于stack exchange,提问作者HansPI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 07:31:08