高階-11分散式session和單點登入
阿新 • • 發佈:2020-12-24
一、分散式session問題
兩個方面的問題。
1、叢集下多個服務節點之間session不同步問題(多個伺服器之間session儲存不一樣)
2、分散式下多個服務之間session不共享問題(瀏覽器無法拿到另一個域名下的session)
解決方案① 叢集下服務節點間session不同步問題
統一儲存,SpringSession
解決方案② 分散式下多個服務間session不共享問題
放大作用域(放在統一域名下)
- 沒有統一域名的就不行了,比如網易遊戲和網易郵箱無法放在同一個域名下
二、SpringSession
maven依賴-->指定session儲存(redis)-->配置redis連結-->註解開啟SpringSession功能
三、單點登入
3.1 簡單Demo
更改host檔案,模擬多域名環境
打包啟動服務
// 在pom檔案所在最外層(三個小服務外面)路徑下打包 // 清理-打包 跳過測試 $ mvn clean package -Dmaven.skip.test=true // 在小服務target目錄下jar檔案處啟動,指定埠 $ java -jar xxl-sso-server-1.1.1-SNAPSHOT.jar --server.port=8081 // 打包安裝到倉庫 $ mvn install
3.2 單點登入流程
四、附錄
// 獲取session和cookie的方法
public void test (HttpSession httpSession, @CookieValue(value = "sso_token",required = false) String sso_token){}
// 放在session中的只是一串令牌,在後端頁面(thymeleaf、jsp)中可以直接呼叫session.value
// 但是在前後端分離專案中不能直接獲取,只能通過介面向後端查詢