Spring Boot会话无法持久化到SPRING_SESSION表的问题求助
Spring Boot会话无法持久化到SPRING_SESSION表的问题求助
我现在遇到一个Spring Session的奇怪问题,希望大家帮忙排查下:
我的Spring Boot应用里,Spring似乎在内存中正常创建并维护会话,但SPRING_SESSION和SPRING_SESSION_ATTRIBUTES表始终没有任何数据,这让我百思不得其解。
先把我的配置和运行情况梳理一下:
1. 依赖配置
pom.xml里已经正确引入了Spring Session核心和JDBC的依赖:
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-core</artifactId> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-jdbc</artifactId> </dependency>
2. 启动类配置
主启动类上添加了@EnableJdbcHttpSession注解,还设置了会话超时时间:
@SpringBootApplication(exclude= {UserDetailsServiceAutoConfiguration.class}) @EnableJdbcHttpSession(maxInactiveIntervalInSeconds = 919) public class AdminApplication extends SpringBootServletInitializer { // ... 启动类其他逻辑 }
3. 会话作用域Bean
定义了一个实现序列化的会话作用域组件,用来存储用户认证信息:
@Component @Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS) public class AuthUser implements Serializable { private static final long serialVersionUID = 1L; private int userId; // ... 其他属性、getter/setter方法 }
4. 过滤器中使用会话Bean
我有一个排序为2的过滤器,自动注入了上面的会话Bean来处理认证逻辑:
@Component @Order(2) public class AuthenticationFilter implements Filter { @Autowired private AuthUser authUserSessionObject; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // ... 认证逻辑实现 } }
实际运行现象
- 第一次请求时,
authUserSessionObject是空的(符合预期),我们会通过逻辑初始化它的userId属性; - 后续请求过来时,
authUserSessionObject能正确保留之前设置的userId值,说明会话在内存中是正常工作的; - 但数据库的SPRING_SESSION表始终是0条记录,同一个schema下的其他业务表操作都正常,排除数据库连接或权限问题;
- 日志开了trace级别,每分钟能看到Spring Session执行清理过期会话的SQL:
DELETE FROM SPRING_SESSION WHERE EXPIRY_TIME < ?,但完全看不到任何插入或更新会话的日志。
我实在搞不懂哪里出了问题,明明会话在内存中正常流转,但就是不持久化到数据库表。有没有朋友遇到过类似问题,或者能给我一些排查方向?
内容来源于stack exchange
相关产品推荐
相关产品推荐

