前言:
爲了更好地瞭解和使用Shiro權限管理框架,本文總結了一下幾個常見問題。
- 各大對象之間是如何串聯起來運作的
- 認證過程是怎樣的
- 授權過程是怎樣的
一、認證過程
1、Subject對象
- Subject接收到前端傳過來需要認證的用戶信息
- 通過login方法傳遞給下個對象進行具體操作
2、SecurityManager對象(全局管理者)
- 將具體認證交給 認證官Authenticator處理
3、Authenticator認證對象
- 進行具體的認證操作
- 通過反射可以獲取到繼承Realm類的所有的Realm包括自定義的Realm
- 並且判斷Realm的個數進入哪個具體的方法
4、Realm對象(與數據庫對接)
- 在Realm中進行具體的查詢數據庫操作
- 將數據包裝傳給下個對象
- 參數一和參數四給授權使用,參數二、三(即密碼和鹽)留個自個兒進行認證
5、認證
- 主要的認證方法是Realm中的assertCredetialsMatcher
- 最底層的認證判斷方法就是equals,有鹽加密的情況下也會進行相應的加密再進行判斷相等
二、授權過程
授權過程大致和認證的過程一致,只是操作的對象有所不同
1、Subject對象
- Sujectd對象的isPermitted方法其實和註解@RequiresPermissions()註解的方式一樣
- 使用時兩者留其一即可
2、SecurityManager對象
3、Authrizer授權對象
- 首先去緩存中查詢有沒有此用戶的權限和角色(本文沒做緩存,所以這裏獲取到的數據爲空)
4、Realm對象
- 再調用Realm中的doGetAuthorizationInfo方法查詢數據庫中的權限和角色
- 進行具體的查詢操作,並且將查出來的權限和角色封裝成包裝對象,進行下一步操作
5、授權
- 最後再通過implies方法來進行權限對比,沒有權限的就拒絕訪問,有權限的通過繼續訪問
- 具體的授權方法implies
三、總結
- 以上就是各個對象之間的調度流程
- Shiro的入門使用可參考博主的另外一篇文章:https://blog.csdn.net/weixin_38802061/article/details/96012077