SpringBoot+SpringSecurity之多模塊用戶認證授權同步


在之前的文章里介紹了SpringBoot和SpringSecurity如何繼承。之后我們需要考慮另外一個問題:當前微服務化也已經是大型網站的趨勢,當我們的項目采用微服務化架構時,往往會出現如下情況:

  1. 首先,我們會建立一個用戶中心UserCenter,實現用戶的登錄、登出以及其他用戶信息維護等相關功能。
  2. 然后,我們會有其他業務模塊,比如訂單中心OrderCenter,用來創建、刪除及查看訂單信息,其中創建、刪除訂單需要管理員角色。

那么接下來我們思考我們如何做到統一的用戶認證及鑒權?

毫無疑問的,首先我們需要在UserCenter中引入SpringSecurity,並保證UserCenter可實現用戶登錄、登出以及自身接口的鑒權等功能正常使用。然后OrderCenter只需要接口的鑒權功能,登錄、登出統一交由UserCenter處理。那么問題來了:

用戶的認證及授權是由UserCenter來處理的,OrderCenter怎么能知道到底是哪個用戶登錄並擁有哪些權限呢?

其實很簡單,之前的文章我們有提到SpringBoot+SpringSecurity+SpringSession+Redis來實現UserCenter多點部署時的session共享,上面這個問題也可以通過此方式解決,基本原理:

UserCenter模塊

  1. 整合SpringSecurity:負責用戶的認證和授權,通過cookie識別是否同一session會話,並將認證通過的用戶及其擁有權限放置到HttpSession中。cookie類似如下:
    SESSION=MzkyNDVjNGUtMjIzNi00ZjcwLTljN2QtNjBjZmUxNGI2ZGEy; Path=/; HttpOnly
  2. 整合SpringSession:負責將HttpSession中的信息放置到Redis中。
  3. 整合Redis:執行存儲。

OrderCenter模塊

  1. 整合SpringSecurity:負責調用接口時鑒權。需要保證UserCenter和OrderCenter相同域名,這樣瀏覽器調用OrderCenter接口的時候會攜帶UserCenter完成登錄后的cookie。
  2. 整合SpringSession:負責根據cookie的session回話標識到Redis中獲取用戶認證信息及其擁有權限。
  3. 整合Redis:提供存儲查詢。

那么這里挖個坑:如果UserCenter和OrderCenter不是同一個域名呢??

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM