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

Spring Security 6.0 RC版本CsrfToken返回异常问题咨询

Spring Security 6.0-RC+中CsrfToken行为变化:Bug还是规范?

这是既定的规范调整,而非Bug,核心原因是Spring Security 6.0-RC1开始优化了会话与CsrfToken的绑定逻辑:

行为差异根源

  • 在6.0-M5版本中,当通过方法参数注入CsrfToken时,框架会自动初始化会话并完成令牌的生成、存储流程,因此直接返回注入的令牌就能得到有效结果。
  • 从RC1版本开始,框架遵循按需初始化会话的设计原则:未建立会话的首次请求中,注入的CsrfToken仅为一个空占位对象(未完成生成与持久化),因为此时会话不存在,默认基于会话的令牌存储无法生效,所以返回的是无效值。

手动处理代码有效的原因

你编写的手动处理代码中,request.getSession()主动触发了会话初始化,此时CsrfTokenRepository可以正常将生成的令牌存储到会话中,因此返回的令牌是有效的——这其实是按照框架预期的流程,显式完成了会话初始化与令牌生命周期管理。

推荐做法

如果需要在无会话场景下返回有效CsrfToken,有两种常见方案:

  1. 保持你当前的手动处理逻辑,显式控制会话初始化与令牌生成流程;
  2. 切换CsrfToken存储方式为Cookie(而非默认的会话存储),这样无需依赖会话即可生成并持久化令牌,配置示例如下:
@Bean
public CsrfTokenRepository csrfTokenRepository() {
    CookieCsrfTokenRepository repository = CookieCsrfTokenRepository.withHttpOnlyFalse();
    repository.setCookieName("XSRF-TOKEN");
    return repository;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 06:25:21