Shiro的應用深入學習

     上一篇中宏觀上分享了Shiro的原理,今天將分享基於url的權限認證授權,以及Shiro的認證與授權的原理和流程

基於url的權限管理流程

                                    

優點:

  使用基於url攔截的權限管理方式,實現起來比較簡單,不依賴框架,使用web提供filter就可以實現。

問題:

  需要將所有的url全部配置起來,有些繁瑣,不易維護,url(資源)和權限表示方式不規範。

Shiro的認證流程

                                                                  
執行流程:

     1、通過ini配置文件創建securityManager

     2、調用subject.login方法主體提交認證,提交的token

     3、securityManager進行認證,securityManager最終由ModularRealmAuthenticator進行認證。

     4、ModularRealmAuthenticator調用IniRealm(給realm傳入token) 去ini配置文件中查詢用戶信息

     5、IniRealm根據輸入的token(UsernamePasswordToken)從 shiro-first.ini查詢用戶信息,根據賬號查詢用戶信息(賬號和密碼)

     如果查詢到用戶信息,就給ModularRealmAuthenticator返回用戶信息(賬號和密碼)

     如果查詢不到,就給ModularRealmAuthenticator返回null

     6、ModularRealmAuthenticator接收IniRealm返回Authentication認證信息

      如果返回的認證信息是null,ModularRealmAuthenticator拋出異常(org.apache.shiro.authc.UnknownAccountException) 

       如果返回的認證信息不是null(說明inirealm找到了用戶),對IniRealm返回用戶密碼 (在ini文件中存在)和 token中的密碼 進行對比,如果不一致拋出異 常(org.apache.shiro.authc.IncorrectCredentialsException

注意:

        ModularRealmAuthenticator作用進行認證,需要調用realm查詢用戶信息(在數據庫中存在用戶信息)

        ModularRealmAuthenticator行密碼對比(認證過程)。

        realm:需要根據token中的身份信息去查詢數據庫(入門程序使用ini配置文件),如果查到用戶返回認證信息,如果查詢不到返回null

Shiro的授權流程

                                            
執行流程:

         1、對subject進行授權,調用方法isPermitted"permission"

         2SecurityManager執行授權,通過ModularRealmAuthorizer執行授權

         3ModularRealmAuthorizer執行realm(自定義的CustomRealm)從數據庫查詢權限數據

調用realm的授權方法:doGetAuthorizationInfo 

        4realm從數據庫查詢權限數據,返回ModularRealmAuthorizer

        5ModularRealmAuthorizer調用PermissionResolver進行權限串比對

        6、如果比對後,isPermitted"permission"realm查詢到權限數據中,說明用戶訪問permission串有權限,否則沒有權限,拋出異常。


     另外在web系統中,shiro也通過filter進行攔截。filter攔截後將操作權交給spring中配置的filterChain(過慮鏈兒),shiro提供很多filter。

    

發佈了144 篇原創文章 · 獲贊 116 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章