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

Spring Boot集成JWT时Token存储与Tomcat会话疑问

关于Spring Security + JWT中Token存储与会话的疑问解答

嗨,这个问题我碰到好多次了,咱们一步步理清楚:

1. Spring根本不会存储生成的JWT Token

JWT的核心就是无状态认证——生成的Token本身就包含了所有必要的用户身份信息(比如用户名、权限、有效期),服务端只需要验证Token的签名和有效期就能完成身份校验。所以:

  • 生成的Token会直接返回给客户端,由客户端自己保存(比如存在localStorage、Cookie或者请求头里)
  • 服务端完全不会存储JWT Token,每次请求时客户端带上Token,服务端实时解析验证即可

2. Tomcat里的活跃会话是怎么来的?

这是因为Spring Security默认会创建HTTP会话,哪怕你用了JWT,原因主要有两个:

  • Spring Security的默认会话创建策略是SessionCreationPolicy.IF_REQUIRED:当框架认为需要会话时(比如要存储SecurityContext、启用CSRF防护等),就会自动创建会话
  • 会话里存储的不是JWT Token,而是SecurityContext对象——这个对象包含了当前用户的认证信息(比如解析JWT后得到的UserDetails),方便同一会话内的后续请求复用认证状态

3. 如何禁用不必要的会话?

如果你想实现纯无状态的JWT认证,完全禁用会话,可以在SecurityFilterChain配置里修改会话创建策略:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
        // 其他配置(比如JWT认证过滤器、权限规则等)
        .sessionManagement(sessionConfig -> 
            sessionConfig.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        );
    return http.build();
}

设置成STATELESS后,Spring Security就不会再创建HTTP会话,Tomcat里的活跃会话也会消失,所有请求都需要携带JWT Token进行实时认证。


内容的提问来源于stack exchange,提问作者Igor Moisés

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 07:27:34