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

在以前的文章裏介紹了SpringBoot和SpringSecurity如何繼承。以後咱們須要考慮另一個問題:當前微服務化也已是大型網站的趨勢,當咱們的項目採用微服務化架構時,每每會出現以下狀況:瀏覽器

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

那麼接下來咱們思考咱們如何作到統一的用戶認證及鑑權?cookie

毫無疑問的,首先咱們須要在UserCenter中引入SpringSecurity,並保證UserCenter可實現用戶登陸、登出以及自身接口的鑑權等功能正常使用。而後OrderCenter只須要接口的鑑權功能,登陸、登出統一交由UserCenter處理。那麼問題來了:session

用戶的認證及受權是由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模塊spa

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

那麼這裏挖個坑:若是UserCenter和OrderCenter不是同一個域名呢??

相關文章
相關標籤/搜索