shiro-会话管理

  shiro提供了完整的企业级会话还礼功能,不依赖与底层容器(如web容器Tomcat),不管JavaSE还是JavaEE环境都可以使用,提供了会话管理、会话事件监听、会话存储/持久化、容器无关的集群、失效/过期支持、对web的透明支持,SSO单点登录的支持等特性。

一. 会话相关的API:org.apache.shiro.session.Session

  1. Subject.getSession():获取会话,其等价于Subject.getSession(true):如果当前没有Session对象会创建一个;Subject.getSession(false):如果当前没有Session则返回null。

  2. 获取当前会话的唯一ID:Serializable getId()

  3. 获取当前Subject的主机地址:String getHost()

  4. 获取/设置当前Session过期时间:

long getTimeout() throws InvalidSessionException
void setTimeout(long maxIdleTimeInMillis) throws InvalidSessionException

  5. 获取Session的启动时间/最后访问时间:

    如果是JavaSE应用需要自己定期调用session.touch()去更新最后访问时间;如果是Web应用,每次进入ShiroFilter都会自动调用session.touch()来更新最后访问时间。

Date getStartTimestamp()
Date getLastAccessTime()

  6. 更新会话最后访问时间以及销毁会话;当Subject.logout()时会自动调用stop

void touch() throws InvalidSessionException
void stop() throws InvalidSessionException

  7. 设置/获取/删除会话属性:

void setAttribute(Object key,Object value)throws InvalidSessionException
Object getAttribute(Object key)throws InvalidSessionException
Object removeAttribute(Object key)throws InvalidSessionException

二. 会话监听器:org.apache.shiro.session.SessionListener

  会话监听器用于监听会话创建、过期及停止

package org.apache.shiro.session;
public interface SessionListener {
    void onStart(Session var1);
    void onStop(Session var1);
    void onExpiration(Session var1);
}

三. SessionDAO:org.apache.shiro.session.mgt.eis.SessionDAO

  AbstractSessionDAO 提供了SessionDAO 的基础实现, 如生成会话ID等

  CachingSessionDAO 提供了对开发者透明的会话缓存的功能,需要设置相应的 CacheManager

  MemorySessionDAO 直接在内存中进行会话维护

  EnterpriseCacheSessionDAO 提供了缓存功能的会话维护,默认情况下使用 MapCache 实现,内部使用ConcurrentHashMap 保存缓存的会话。

四. 会话验证:

  Shiro 提供了会话验证调度器,用于定期的验证会话是否已过期,如果过期将停止会话

  出于性能考虑,一般情况下都是获取会话时来验证会话是否过期并停止会话的;但是如在 web 环境中,如果用户不主动退出是不知道会话是否过期的,因此需要定期的检测会话是否过期,Shiro 提供了会话验证调度器SessionValidationScheduler

  Shiro 也提供了使用Quartz会话验证调度器:QuartzSessionValidationScheduler

原文地址:https://www.cnblogs.com/luliang888/p/11173788.html