Apache Shiro核心功能之Session Management(五)

186 阅读2分钟

Sessions are buckets of data that your users carry with them for a period of time when using your application.

会话是用户在使用应用程序时携带的特定时间有效的数据

本系列文章目录如下:

  1. 为什么要使用Apache Shiro(一)
  2. Apache Shiro的三个重要概念(二)
  3. Apache Shiro核心功能之Authentication(三)
  4. Apache Shiro核心功能之Authorization(四)
  5. Apache Shiro核心功能之Session Management(五)
  6. Apache Shiro核心功能之Cryptography(六)
  7. Apache Shiro集成
  8. 将Apache Shiro集成到Spring-Boot应用程序中
  • Shiro会话最重要的好处之一可能是它们是独立于容器的。这具有微妙但极其强大的影响。Shiro的架构支持可插入的Session数据存储,比如企业缓存、关系数据库、NoSQL系统等等。
  • 基于POJO/J2SE (IoC 友好型)
  • Session存储:会话数据可以轻松地存储在任意的数据源中
  • 简单而强大的集群:Shiro的会话可以很容易地使用任何现成的网络缓存产品进行集群,比如Ehcache、Coherence、GigaSpaces等。
  • 事件侦听:您可以侦听这些事件,并对它们做出自定义应用程序行为的响应——例如,在它们的会话过期时更新一条用户记录。
  • 不活动/过期支持:会话会由于预期的不活动而过期,但如果需要的话,可以通过touch()方法来延长会话的时间,使其保持“活着”。这在RIA (Rich Internet Application)环境中非常有用,在这种环境中,用户可能正在使用桌面应用程序,但可能没有定期与服务器通信,但服务器会话不应该过期。
  • Apache Shiro在安全框架的世界中提供了一些唯一的东西:一个一致的会话API,可用于任何应用程序和任何架构层。
  • 异构客户端访问:Shiro会话的另一个好处是,如果需要,会话数据可以跨客户端技术共享。
  • 可以用来做SSO

Subject’s Session

Session session = subject.getSession();
Session session = subject.getSession(boolean create);

第一个方法将返回Subject的现有会话,或者如果还没有会话,它将创建一个新会话并返回它。 第二个方法接受一个布尔参数,该参数决定是否创建一个新的Session如果它不存在。

Session methods

Session session = subject.getSession();
session.getAttribute("key", someValue);
Date start = session.getStartTimestamp();
Date timestamp = session.getLastAccessTime();
session.setTimeout(millis);
...