場景還原
- A、B 站點同主域(如
a.example.com、b.example.com)。
- A 站登錄後,Cookie 寫入
.example.com,攜帶 Token。
- 訪問 B 站攔截器讀取 Cookie Token → 調用 Auth 服務驗證 → 通過後需在 B 站建立登錄態。
核心操作:手動構建 Session
// SpringMVC 攔截器 / Controller 中
HttpSession session = request.getSession(true); // 獲取或創建 Session
session.setAttribute("USER_INFO", userVo); // 存入用戶信息
session.setAttribute("LOGIN_TOKEN", token); // 可選:保留原始 Token
// 關鍵:確保 SessionID 寫入 Cookie(默認 JSESSIONID)
// 若域共享需在 application.yml 配置:
// server.servlet.session.cookie.domain: .example.com
Session 共享進階方案
- Spring Session + Redis:多實例自動共享,配置
spring.session.store-type=redis。
- JWT 無狀態:Token 自攜用戶信息,無需服務端 Session,B 站僅驗證簽名即可。
- 統一登錄中心 (CAS/OAuth2):A、B 皆重定向至 Auth Server,獲取統一 Ticket/Token。
安全提示
- Cookie 設置
HttpOnly、Secure、SameSite=Lax。
- Token 簽名驗證防篡改,設置合理過期時間。
- 敏感操作需二次驗證(短信/密碼/生物識別)。