1、前言
很多Spring Boot應用使用了Session作為快取,一般會在用戶登錄后保存用戶的關鍵資訊,如:
-
用戶ID,
-
用戶名,
-
用戶token,
-
權限角色集合,
-
等等,,,
在管理員修改了用戶的權限后,希望能立即生效,此時,會發現一個問題,管理員的HTTP請求物件,只能獲取自己的Session物件,而無法獲取用戶的Session物件,這樣對已登錄的用戶、或Session未過期的用戶似乎沒有辦法實作動態權限變更,
當然,并不是真的沒有辦法,通常的做法,可使用Spring Security插件框架來實作動態權限變更,
這里,提供了另一種思路,即利用ServletContext物件的共享特性,來實作用戶權限變更的資訊傳遞,
2、總體思路
建立一個用戶變更字典globalChangeMap(Map<Integer,Integer>型別)作為userId與changeFlag的映射關系,其中changeFlag暫時沒有意義,如果需要通知資訊型別超過1種,不足32種,可將changeFlag按位編碼,每位表示一種變更型別,還是先假設只有權限變更這一種型別,
對globalChangeMap作為核心進行封裝,作為變更服務類ChangeService,提供必要的介面方法,
將ChangeService加入ServletContext物件中,實作全域共享,
如果管理員修改了某個用戶的權限后,則在globalChangeMap中加入一條變更資料,
而AuthorizationAspect切面類,該切面類負責token認證、權限認證,現在先檢查globalChangeMap有無變更記錄,如果有,表示要查詢并更新用戶權限,并將新的權限角色集合更新到Session中,最后移除globalChangeMap中該用戶的變更資料,對于本次攔截的請求,則可根據新的權限配置進行處理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/288506.html
標籤:其他
上一篇:Python爬蟲實戰,argparse模塊,Github用戶粉絲資料爬蟲
下一篇:pom.xml成了普通xml檔案
