shiro提供了完整的企业级会话还礼功能,不依赖与底层容器(如web容器Tomcat),无论JavaSE仍是JavaEE环境均可以使用,提供了会话管理、会话事件监听、会话存储/持久化、容器无关的集群、失效/过时支持、对web的透明支持,SSO单点登陆的支持等特性。web
一. 会话相关的API:org.apache.shiro.session.Sessionapache
1. Subject.getSession():获取会话,其等价于Subject.getSession(true):若是当前没有Session对象会建立一个;Subject.getSession(false):若是当前没有Session则返回null。缓存
2. 获取当前会话的惟一ID:Serializable getId()session
3. 获取当前Subject的主机地址:String getHost()性能
4. 获取/设置当前Session过时时间:spa
long getTimeout() throws InvalidSessionException void setTimeout(long maxIdleTimeInMillis) throws InvalidSessionException
5. 获取Session的启动时间/最后访问时间:code
若是是JavaSE应用须要本身按期调用session.touch()去更新最后访问时间;若是是Web应用,每次进入ShiroFilter都会自动调用session.touch()来更新最后访问时间。对象
Date getStartTimestamp()
Date getLastAccessTime()
6. 更新会话最后访问时间以及销毁会话;当Subject.logout()时会自动调用stopblog
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