基礎知識:
單點登錄:
在微服務或者分布式情況下,我們的服務器不止一個需要用戶在一個JVM上執行登錄邏輯以后,其他的服務器JVM都認可已經登錄的身份,這就是--->單點登錄。
session原理(存放在在服務器端,每次請求會重置時間)
當客戶端發送一個請求的時候服務器端會判斷是否有一個名為jsesion的cookie
如果沒有,服務端就會創建一個名為jsession的cookie,cookie的值為uuid,同時會創建一個uuid為key的session被創建出來,同時會把名為jsession的cookie返回到客戶端
如果客戶端存在cookie且沒有超時,再次請求的時候就直接會將名為jsession的cookie返回到請求頭中.
cookie原理(存放在客戶端,每次請求不會重置時間)
客戶在一個項目中登錄之后其他與之有關聯的項目就不需要再進行重復登錄
1.利用session廣播機制實現
參與集群的每個節點的Session狀態都被復制到集群中的其他所有節點上,無論何時,只要Session發生改變,Session數據都要重新被復制
Tomcat、JBoss、was都提供了這樣的功能,其中Tomcat采用集群節點廣播復制,JBoss采用配對復制機制
優點:每個節點都復制一份Session,一個節點出現問題時其它節點可以接替它的工作
缺點:節點間進行Session同步會占據不少系統資源,整體性能隨着集群節點數的增加而急劇下降
2.使用cookie+redis實現
(1)客戶端第一次登陸時,通過服務端產生cookie和一個與之對相應的session
(2)將第一次登錄產生的cookie和User對象(登錄所需信息),以key-value的形式存儲在Redis中
(3)當客戶端再次訪問另外需要登錄操作的頁面時,將該客戶端的cookie拿到Redis中進行比對,如果存在,則視為已登錄
(4)因為session是存在有效期的,所以可以在Redis中設置與之對相應的有效時間
3.使用token實現
(1)構SSO服務站點
(2)客戶端第一次登錄時在SSO站點獲取登陸憑證
(3)客戶端拿着登陸憑證去服務端登錄
(4)服務端拿着客戶端的登陸憑證去尋找SSO服務站點進行校驗
(5)SSO校驗成功並通知服務端該客戶一登錄,可以進行下一步操作