天天看點

shiro安全架構擴充教程--如何擴充實作集中式session管理

        上一章節我和大家分享的是如何擴充異步請求分支處理,這一章節我準備分享如何實作集中式session管理,shiro一大特色就是有自己一套session機制,與原生的httpsession差不多風格的api,用起來比較順手,我個人也比較喜歡;spring security是比較依賴與原生httpsession,是以比較難擴充這會話機制,但是我們shiro使用者就不用擔心這個問題,請大家準備好雞蛋殼,香蕉皮吧...

進入主題,我們先看看session管理器

基本用到就三個參數sessionValidationSchedulerEnabled(掃描session線程,負責清理逾時會話), sessionDao是進行會話讀寫的實作,globalSessionTimeout是會話存活時間(預設是30分鐘)

其他參數可看源碼配置,象session的cookie編号鍵之類的,有需要才去改

下面看看我們的讀寫會話實作類

getActiveSessions這個方法是用來統計目前活動的session,但是memcached也沒有特别好的方法能擷取同一批鍵值對,暫時隻能不支援方法,如果有朋友想到好的解決方案,望請告知下小弟

其實這個類跟普通的crud差不多,主要是通過設定memcached的過期時間來作為session的存活時間,如果傳回為null則認為session是登入逾時了,值得注意一個問題memcached應該需要評估足夠多的初始化記憶體,不然可能使用者量一上去,就可能有會話丢失的可能,畢竟記憶體不夠了memcached會自動把舊的一些資料擠出去,這要看memcached的失效政策設定

很明顯我們這裡的sessionDao實作類已經完成,然後配置到檔案裡面

如何配置memcached的用戶端執行個體我就不啰嗦,百度一大堆,把這個sessionDAO的編号注入到我們的sessionManager管理器裡面

然後我們的會話管理器又要配置到哪裡呢

然後就完工了,最後就配置個nginx+2個tomcat叢集下通路測試下即可

歡迎拍磚...

繼續閱讀