前後端基於json進行交互,接口通過JWT無狀態token進行權限校驗
- 登錄時,密碼驗證通過,取當前時間戳生成簽名Token,將用戶的基本信息放到分佈式緩存中(Redis),將生成的Token放在Response Header的Authorization屬性中,同時在緩存中記錄值爲當前時間戳的RefreshToken,並設置有效期
- 客戶端請求每次攜帶Token進行請求
- 服務端每次校驗請求的Token有效後,同時比對Token中的時間戳與分佈式緩存中(Redis)的RefreshToken時間戳是否一致,一致則判定Token有效
- 當請求的Token被驗證時拋出TokenExpiredException異常時說明Token過期,校驗時間戳一致後重新生成Token並調用登錄方法
- 每次生成新的Token後,同時要根據新的時間戳更新與分佈式緩存中的RefreshToken,以保證兩者時間戳一致
採用JWT有效期內刷新Token方案,解決併發請求問題
爲避免多個請求同一時間分別生成不同的Token,我們引入redis鎖機制。即我們的目的是同一個用戶同一時間的不同請求,只允許獲得鎖的請求進行令牌刷新,其他的請求因爲是在令牌有效期因此直接放行