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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM