- 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容器的会话管 理。