Shiro 会话偶尔丢失问题排查
问题现象
应用每次重启后,所有在线用户同时掉线,全部被重定向回登录页。
排查过程
- 查看登录日志,无异常登录记录
- 检查 Cookie,
QUICKADMIN_SESSIONID仍然存在 - 发现会话存储用的是
MemorySessionDAO,纯内存实现
内存会话随进程生灭:重启 = 全员掉线,这是设计取舍而非 Bug。
解决方案
单实例部署可直接接受;需要水平扩展/平滑重启时,把 SessionDAO 换成 Redis 实现,并同步迁移 LoginGuard、业务缓存等内存态组件。
@Bean
public SessionDAO sessionDAO() {
return new RedisSessionDAO(); // 示意
}小结
- 内存会话只适合单实例
- 重启前先摘流量,或直接上集中式存储
评论 · 0 条