Shiro學習筆記之(六)Apache Shiro 會話管理
一、獲取session
Shiro 中獲取session方法比較簡單
二、SessionManager
SessionManager為subject提供session管理,包括建立,刪除,失效,驗證等。SessionManager預設實現DefualtSessionManager.自定義SessionManager可在shiro.ini中配置。
2.1 Session Timeout
session超時預設是30分鐘。自定義配置
注意單位是毫秒,1小時=1000*60*60,globalSessionTimeout 是預設所有的session的超時設定,也可以通過Per-Session Timeout 設定單獨的會話超時時間值。
2.2 Session Listeners
Shiro支援SessionListener對會話進行監聽,實現SessionManager介面(或者SessionListenerAdapter)來作出相應的處理。在shiro.ini中配置。當任何會話事件發生時,SessionListener都會被通知,不是針對某一個特定的會話。
2.3 Session Storage
當會話建立或者更新時,資料需要持久化到一個儲存位置,以便它能夠被應用程式訪問,會話失效時就會從儲存位置刪除。SessionManager 支援這些操作,SessionDAO反映了資料訪問物件設計模式,SessionDAO的作用是任何資料儲存進行通訊。
SessionDAO可以自定義,在[main]selction下配置
2.4 EHCache SessionDAO
EHCache預設未啟用的,可以使用SessionManagement啟用EHCache。EHCache SessionDAO將會在記憶體中儲存會話,溢位時儲存到磁碟,如下配置使用EHCache。
2.5 Custom Session IDs
SessionDAO 在建立一個新的會話時,使用一個內建的SessionIdGenerator元件來生產一個新的Session ID,並與建立的session例項繫結,然後通過sessionDAO儲存下來。
2.6 Session Validation & Scheduling
Session 驗證,將無效的會話從會話資料儲存中刪除,保證儲存不會由於不能再次使用的會話而導致寫入超時。SessionManager支援SessionValidationScheduler,負責定期地驗證會話以確保它們是否需要清理。預設可用的SessionValidationScheduler是ExecutorServiceSessionValidationScheduler,預設每小時驗證一次,也可自行配置。
SessionValidationScheduler也可以自行實現,然後配置。如果希望禁止定期驗證session,可以這樣配置
securityManager.sessionManager.sessionValidationSchedulerEnabled = false,但是會話從會話資料儲存取回資料時仍然會被驗證,只是不會定期驗證了。