1).Shiro提供了完整的企業級會話管理功能,不依賴於底層容器(如web容器tomcat),不管JavaSE還是JavaEE環境都可以用,提供了會話管理,會話事件監聽,會話存儲/持久化,容器無關的集羣,失效/過期支持,對web的透明支持,SSO單點登錄的支持等特性。
2).Shiro中的session的API中的方法跟HttpSession類似,以下是Shiro會話的API
1).Subject.getSession() : 即可獲取會話;其等價於Subject.getSession(true),如果當前沒有創建Session對象會創建一個;Subject.getSession(false),如果沒有創建Session則返回null2).session.getId() : 獲取當前會話的唯一標識
3).session.getTimeout() & session.getTimeout(毫秒):獲取/設置當前session的過期時間
4).session.getStartTimestamp() & session.getLastTimestamp() : 獲取會話的啓動時間及最後訪問時間;如果是JavaSE應用需要自己定期調用session.touch()去更新最後訪問時間;如果是web應用,每次進入ShiroFilter都會自動調用session.touch()來 更新最後訪問時間
5).session.touch() & session.stop() : 更新會話最後訪問時間及銷燬會話;當Subject.logout()時會自動調用stop方法來銷燬會話。如果在web中,調用HttpSession.invalidate()也會自動調用Shiro Session.stop方法進行銷燬Shiro的會話
6).session.setAttribute(key,val) & session.getAttribute(key) & session.reomveAttribute(key):設置/獲取/刪除會話屬性;在這個範圍內都可以對這個屬性進行操作
7).會話監聽器:會話監聽器用於監聽會話的創建,過期及停止事件
SessionDao(可以把session寫到數據庫中,對session進行增刪查改操作)
1).AbstractSessionDAO 提供了 SessionDAO 的基礎實現,如生成會話id等2).CachingSessionDAO 提供了對開發者透明的會話緩存功能,需要設置相應的CacheManager
3).MemorySessionDAO 直接在內存中進行會話維護
4).EnterpriseCacheSessionDAO 提供了緩存功能的會話維護,默認情況下使用MapCache實現,內部使用ConcurrentHashMap保存緩存的會話。