Shiro 会话偶尔丢失问题排查

问题现象

应用每次重启后,所有在线用户同时掉线,全部被重定向回登录页。

排查过程

  1. 查看登录日志,无异常登录记录
  2. 检查 Cookie,QUICKADMIN_SESSIONID 仍然存在
  3. 发现会话存储用的是 MemorySessionDAO纯内存实现
内存会话随进程生灭:重启 = 全员掉线,这是设计取舍而非 Bug。

解决方案

单实例部署可直接接受;需要水平扩展/平滑重启时,把 SessionDAO 换成 Redis 实现,并同步迁移 LoginGuard、业务缓存等内存态组件。

@Bean
public SessionDAO sessionDAO() {
    return new RedisSessionDAO(); // 示意
}

小结

  • 内存会话只适合单实例
  • 重启前先摘流量,或直接上集中式存储

评论 · 0 条

还没有评论,来抢沙发吧
回复
验证码