Shiro實戰(五) - 會話管理
Shiro提供了完整的企業級會話管理功能,不依賴於底層容器(如web容器Tomcat),不管JavaSE還是JavaEE環境都可以使用,提供了會話管理、會話事件監聽、會話儲存/持久化、容器無關的叢集、失效/過期支援、對Web的透明支援、SSO單點登入的支援等特性
即直接使用Shiro的會話管理可以直接替換Web容器的會話管理。
1 會話
即使用者訪問應用時保持的連線關係,在多次互動中應用能夠識別出當前訪問的使用者是誰,且可以在多次互動中儲存一些資料
如訪問一些網站時登入成功後,網站可以記住使用者,且在退出之前都可以識別當前使用者是誰。
Shiro的會話支援不僅可以在普通的JavaSE應用中使用,也可以在JavaEE應用中使用,如web應用。且使用方式是一致的。
login("classpath:shiro.ini", "zhang", "123"); Subject subject = SecurityUtils.getSubject(); Session session = subject.getSession();
登入成功後使用 Subject.getSession()
即可獲取會話

其等價於Subject.getSession(true)

即如果當前沒有建立Session物件會建立一個;另外Subject.getSession(false),如果當前沒有建立Session則返回null(不過預設情況下如果啟用會話儲存功能的話在建立Subject時會主動建立一個Session)

DelegatingSubject#getSession(boolean create)
- 獲取當前會話的唯一標識
session.getId();

- 獲取當前Subject的主機地址,該地址是通過HostAuthenticationToken.getHost()提供的
session.getHost();

- 獲取/設定當前Session的過期時間;如果不設定預設是會話管理器的全域性過期時間
session.getStartTimestamp(); session.getLastAccessTime();
獲取會話的啟動時間及最後訪問時間;如果是JavaSE應用需要自己定期呼叫session.touch()去更新最後訪問時間;如果是Web應用,每次進入ShiroFilter都會自動呼叫session.touch()來更新最後訪問時間。