天天看點

使用redis進行基于shiro的session叢集共享

概述:簡述本次記錄的主要内容 

shiro的session:關于shiro的session管理

實作共享

總結

因為項目中用到了shiro的權限控制,而且使用的是shiro的session,是以我就基于shiro的session管理基礎上對session進行多tomcat共享,共享的思路也很簡單,就是将session儲存到資料庫,每個伺服器在收到用戶端請求的時候都從資料庫中取,這樣就統一了多個伺服器之間的session來源,實作了共享。隻不過這裡我使用的資料庫是redis。

在明白了shiro的session管理之後,我們就可以在此基礎上進行session的共享了,其實隻需要繼承EnterpriseCacheSessionDAO(其實繼承CachingSessionDAO就可以了,但是這裡考慮到叢集中每次都通路資料庫導緻開銷過大,這裡在本地使用ehcache進行緩存,每次讀取session的時候都先嘗試讀取本地ehcache緩存,沒有的話再去遠端redis資料庫中讀取),然後覆寫原來的增删改查操作,這樣多個伺服器就共享了session,具體實作如下:

使用redis進行基于shiro的session叢集共享
使用redis進行基于shiro的session叢集共享

上面的主要邏輯是實作session的管理,下面是和redis資料庫互動

使用redis進行基于shiro的session叢集共享
使用redis進行基于shiro的session叢集共享

這裡隻是實作了簡單的session共享,但是對session的管理還不夠全面,比如說session的驗證。其實通過tomcat容器本身就可以實作session共享,後面再詳細了解下tomcat對于session的管理。