Shiro+Redis實現Tomcat集羣Session共享

一、背景

  當我們使用了nginx做項目集羣以後,就會出現一個很嚴重的問題亟待解決,那就是:tomcat集羣之間如何實現session共享的問題,如果這個問題不解決,就會出現登陸過後再次請求資源依舊需要登陸的問題。這篇文章我們就解決這個問題。

二、實現步驟

說明:本篇是在spring+shiro集成的基礎上進行改進的,如果不知道spring和shiro怎麼集成,請移步:spring集成shiro做登陸認證

1.在pom.xml中添加shiro-redis和jedis的依賴
Shiro+Redis實現Tomcat集羣Session共享

2.首先我們需要對redis進行集成,在resources下新建config.properties
Shiro+Redis實現Tomcat集羣Session共享

3.在resources/spring文件夾下新建spring-redis.xml來集成redis操作客戶端
Shiro+Redis實現Tomcat集羣Session共享

4.添加redisClient.java作爲訪問redis的客戶端
Shiro+Redis實現Tomcat集羣Session共享

5.接着,我們對spring-shiro.xml做如下修改(紅色標記的部分)
Shiro+Redis實現Tomcat集羣Session共享

6.spring.xml做如下修改
Shiro+Redis實現Tomcat集羣Session共享

到此我們就完了shiro+redis實現session共享的問題,其實也很簡單,其中的實現邏輯也很簡單,就是shiro的攔截器會首先去redis裏面獲取session,作爲當本次請求的session.

其他代碼以及簡單測試代碼不再貼出,給出github地址:https://github.com/hafizzhang/shiro-session-cluster.git

三、總結

  通過本文,我們就完成了spring+shiro+redis實現集羣session共享的問題,經過親測可行。但有一點遺憾的地方,就是每次請求至少會有8次redis的讀操作,一次寫操作,這個問題還沒有找到很好的解決辦法,本地使用ehcahe也不太現實,因爲涉及到本地緩存和redis緩存同步的問題,如果你有好的辦法,歡迎討論交流學習!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章