SpringSecurity之權(quán)限模塊設(shè)計

前面我們了解了關(guān)于微服務(wù)權(quán)限設(shè)計方案以及J W T的相關(guān)介紹,今天我們來聊一下,如何避免自己重復(fù)的寫相同的代碼,一次代碼實現(xiàn),即可完美復(fù)制到任何項目中實現(xiàn)權(quán)限相關(guān)的功能。
0 1 實現(xiàn)思路
首先,我們要做的就是先將我們的權(quán)限模塊的功能了解,要做哪些東西。比如:用戶登錄、授權(quán)、認證、過濾、攔截等等。
我們將內(nèi)容寫完了,還不算完成,要做成可以引入到其他項目中的jar包,我們不能將一些配置項寫死,比如:過濾內(nèi)容、登錄路徑、退出路徑、數(shù)據(jù)庫訪問鏈接等等。
上述文件是要讓使用jar包的人靈活的自己配置,可控的來實現(xiàn)他人的高度定制內(nèi)容!
0 2
代碼結(jié)構(gòu)
我們看一下我自己實現(xiàn)的權(quán)限通用模塊的jar包,如下圖:

上圖中每一個類的含義如下表所示:
類名含義
TokenWebSecurityConfig
安全配置類(2.7.0之前版本使用的)
TwoWebSecurityConfig
安全配置類(2.7.0之后版本使用的)
SecutityBaseController
測試權(quán)限控制類
TokenAuthFilter
授權(quán)過濾器
TokenLoginFilter
認證過濾器
PermissionResp
權(quán)限響應(yīng)類
DefaultPasswordEncoder
密碼處理工具類
TokenLogoutHandler
退出處理器
TokenManager
token管理工具類
UnauthEntryPoint
未授權(quán)統(tǒng)一處理類
實現(xiàn)未授權(quán)處理類
SecurityUser
安全用戶實體類
SecurityApplication
啟動類(打包時可刪除此類)
這其中我引入了自己的通用模塊中的異常處理、以及一些工具類,這些類在使用過程中,完全可以自己去實現(xiàn),代碼大致相同的內(nèi)容。沒有必要完全照搬我的。自己適用即是最好的。
使用說明
#工具使用說明
? ?使用時需要在啟動類掃描你的包路徑
## 1、Spring security的使用說明
? ? 不需要使用Spring security的需要在引入jar報的時候排除相關(guān)依賴
? ??
? ? ?<dependency>
? ? ? ??
? ? ? ? ? ? ? ? <groupId>org.springframework.boot</groupId>
? ? ? ? ? ? ? ? <artifactId>spring-boot-starter-security</artifactId>
? ? ? ??
? ? </dependency>
? ??
? ? 需要引入的,需要添加下面的配置
? ? token:
? ? ? # 是否校驗token時效性,默認為true
? ? ? enable: true
? ? ? # 是否校驗token,默認為true
? ? ? checkToken: true
? ? ? # 是否校驗登錄,默認true
? ? ? checkLogin: true
? ? ? # 是否校驗菜單權(quán)限,默認為true
? ? ? checkPermission: false;
? ? ? # 過期時間(分鐘)
? ? ? time: 30
? ? ? # Token 存入緩存的key 后綴
? ? ? oldSuffix: aaa-TOKEN
? ? ? # 刷新Token 存入緩存的key 后綴
? ? ? refSuffix: aaa-REF-TOKEN
? ? ? # Token 編碼秘鑰
? ? ? signKey: 123456783909823
? ? permission:
? ? ? # 保存權(quán)限到redis的key后綴,key值為用戶登錄名userName + "-" + suffix
? ? ? suffix: aaa-PERMISSION
? ? login:
? ? ? # 登錄地址
? ? ? url: /aaa/login
? ? loginOut:
? ? ? url: /aaa/loginout
? ? filterInformation: /ws/**,/swagger-ui.html,/webjars/springfox-swagger-ui/**,/swagger-resources/**,/v2/api-docs/**,/manage/permission/range,favicon.ico,/doc.html,/webjars/**,/swagger-resources/**,/v2/api-docs/**,/configuration/security,/aa/captcha,/user/register
? ??
? ? 將resources/security中的UserDetailsServiceImpl復(fù)制到自己的service中,調(diào)整具體的實現(xiàn)邏輯
? ??
?# version
?2.0 : 調(diào)整User實體類,增加公司ID、用戶UUID、去掉了公交公司ID
?3.0 : 調(diào)整生成token時,增加了companyId和UUID,通過token獲取companyId
?4.0 : SpringSectury調(diào)整為2.7版本以上后,TokenWebSecurityConfig設(shè)置為過期,使用新的TwoWebSecurityConfig
