Shiro+Redis實現Tomcat集羣Session共享

1、背景

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

2、實現步驟

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

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

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

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

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

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

6.spring.xml作以下修改
Shiro+Redis實現Tomcat集羣Session共享tomcat

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

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

3、總結

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

相關文章
相關標籤/搜索