tomcat集羣時session共享問題

簡單聊一下面對tomcat集羣,咱們如何管理session。nginx

使用nginx

第一種方法比較簡單,比較笨,就是將session進行廣播,多個tomcat互相廣播session,即用戶在一個tomcat登錄後,將這個tomcat保存的用戶session信息,廣播到其餘tomcat裏。這樣子無論用戶的請求分配給哪一個tomact,都存有用戶的session信息。redis

缺點:這無疑增長了每一個tomact對內存的消耗。不可取。後端

 

第二種方法是,IP綁定。即nginx提供ip-hash功能,將固定的ip發起的請求始終分配給固定的tomcat來處理。那麼這個tomcat就會存在該用戶的session信息。tomcat

缺點:服務器

一、一大堆人連同一個網訪問的時候,就沒有負載均衡這一說了,這一大堆的ip都是同樣,都去訪問同一個tomcat。網絡

二、若是這我的訪問的tomcat忽然掛了,那nginx的故障轉移機制將會分發給另外一個tomcat服務器,這樣一來全部請求這個tomcat的全部用戶就又須要從新登入了。session

三、若是這我的用着用着忽然在用的網絡不穩定,而後這我的換了另外一個網,這樣ip一換,這我的又要從新登入了。負載均衡

 

使用redis

tomcat-redis-session-manager

多個tomcat上的應用,配置了同一個redis服務器,來存儲session信息。達到了共享session的做用。加密

 

使用jwt

放棄session機制,使用jwt機制。簡單來講就是userid+隨機數+簽名加密生成一個token,先後端通訊經過token來交互。客戶端第一次請求登入以後,服務器端給客戶端一個token,服務器將token做爲key值,userid做爲value值,30分鐘做爲有效時間存入redis中;客戶端第二次訪問controller以前進行攔截,判斷是否有token,若是有token解密獲取userid,而後取查詢redis,token和userid是否匹配,若是匹配就容許訪問controller,請求返回以後,服務器將從新生成新的token返回給客戶端。簡單來講就是每次請求成功以後token都會改變,token存在redis中,這樣一來至於redis分發到哪一個tomat並不影響,由於token是存在redis中的。spa

這種服務模式就是一種用戶的無狀態服務。所寫接口,均不判斷用戶是否登陸,是否合法,只經過約定的祕鑰來判斷請求是否正確,只要正確,就提供返回結果。

相關文章
相關標籤/搜索