会话管理
欢迎来到我的 ChatGPT 中转站,极具性价比,为付费不方便的朋友提供便利,有需求的可以添加左侧 QQ 二维码,另外,邀请新用户能获取余额哦!最后说一句,那啥:请自觉遵守《生成式人工智能服务管理暂行办法》。
# SessionManager
会话管理器,负责创建和管理用户的会话(Session)生命周期,它能够在任何环境中在本地管理用户会话,即使没有 Web / Servlet / EJB 容器,也一样可以保存会话。默认情况下,Shiro 会检测当前环境中现有的会话机制(比如 Servlet 容器)进行适配,如果没有 (比如独立应用程序或者非 Web 环境),它将会使用内置的企业会话管理器来提供相应的会话管理服务,其中还涉及一个名为 SessionDAO 的对象。SessionDAO 负责 Session 的持久化操 作(CRUD),允许 Session 数据写入到后端持久化数据库。
# 会话管理实现
SessionManager 由 SecurityManager 管理。Shiro 提供了三种实现
DefaultSessionManager:用于 JavaSE 环境
ServletContainerSessionManager:用于 web 环境,直接使用 Servlet 容器的会话
DefaultWebSessionManager:用于 web 环境,自己维护会话(不使用 Servlet 容器的 会话管理)
# 获得 Session 方式
Session session = SecurityUtils.getSubject().getSession();
session.setAttribute(“key”,”value”);
1
2
2
Controller 中的 request,在 Shiro 过滤器中的 doFilerInternal 方法,被包装成 ShiroHttpServletRequest。SecurityManager 和 SessionManager 会话管理器决定 session 来源于 ServletRequest 还是由 Shiro 管理的会话。无论是通过 request.getSession 或 subject.getSession 获取到 session,操作 session,两者都是等价的。
上次更新: 2025/04/12, 05:37:39