Shiro的運行原理

前言:

 

爲了更好地瞭解和使用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

 

三、總結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章