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,有两种常见方案:
- 保持你当前的手动处理逻辑,显式控制会话初始化与令牌生成流程;
- 切换CsrfToken存储方式为Cookie(而非默认的会话存储),这样无需依赖会话即可生成并持久化令牌,配置示例如下:
@Bean public CsrfTokenRepository csrfTokenRepository() { CookieCsrfTokenRepository repository = CookieCsrfTokenRepository.withHttpOnlyFalse(); repository.setCookieName("XSRF-TOKEN"); return repository; }
内容的提问来源于stack exchange,提问作者Antro
相关产品推荐
相关产品推荐

