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