shiro-會話管理

  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

相關文章
相關標籤/搜索