Session Manager 会话管理介绍一下

  • Session

所谓session,即用户访问应用时保持的连接关系,在多次交互中应用能够识别出当前访问的 用户是谁,且可以在多次交互中保存一些数据。

Subject subject = SecurityUtils.getSubject();

Session session = subject.getSession();

session.getId(); // 获取当前session的唯一标识

session.getHost(); // 获取当前Subject的主机地址,该地址是通过

HostAuthenticationToken.getHost()提供的

session.getTimeOut(); // 获取超时时间

session.setTimeOut(); // 设置超时时间(不设置默认是全局过期时间)

session.touch(); // 更新最后访问时间

session.stop(); // 销毁session,当Subject.logout()时会自动调用stop方法来销毁会话。如 果在web中,调用javax.servlet.http.HttpSession.invalidate()也会自动调用shiro

session.top方法进行销毁shiro的会话

session.setAttribute(“key”,”123”); // 设置session属性

session.getAttribute(“key”); // 获取session属性

session.removeAttribute(“key”); // 删除属性

注:Shiro提供的会话可以用于javaSE/javaEE环境,不依赖于任何底层容器,可以独立使 用,是完整的会话模块。

  • Session manager 会话管理器

会话管理器管理着应用中所有Subject的会话的创建、维护、删除、失效、验证等工作。是

Shiro的核心组件,顶层组件SecurityManager直接继承了SessionManager,且提供了

SessionSecurityManager实现直接把会话管理委托给相应的SessionManager、

DefaultSecurityManager及DefaultWebSecurityManager 默认SecurityManager都继承 了SessionSecurityManager。

  • Shiro提供了三个默认实现:

DefaultSessionManager:DefaultSecurityManager使用的默认实现,用于JavaSE环境;

ServletContainerSessionManager: DefaultWebSecurityManager使用的默认实现,用于 Web环境,其直接使用Servlet容器的会话;

DefaultWebSessionManager:用于Web环境的实现,可以替代 ServletContainerSessionManager,自己维护着会话,直接废弃了Servlet容器的会话管 理。