1. 程式人生 > >Shiro的原理及其執行流程介紹

Shiro的原理及其執行流程介紹

什麼是shiro  

shiro是apache的一個開源框架,是一個許可權管理的框架,實現 使用者認證、使用者授權。

spring中有spring security (原名Acegi),是一個許可權框架,它和spring依賴過於緊密,沒有shiro使用簡單。

shiro不依賴於spring,shiro不僅可以實現 web應用的許可權管理,還可以實現c/s系統,分散式系統許可權管理,shiro屬於輕量框架,越來越多企業專案開始使用shiro。

使用shiro實現系統的許可權管理,有效提高開發效率,從而降低開發成本。

 shiro架構  

subject:主體,可以是使用者也可以是程式,主體要訪問系統,系統需要對主體進行認證、授權。

securityManager:安全管理器,主體進行認證和授權都是通過securityManager進行。

authenticator:認證器,主體進行認證最終通過authenticator進行的。

authorizer:授權器,主體進行授權最終通過authorizer進行的。

sessionManager:web應用中一般是用web容器對session進行管理,shiro也提供一套session管理的方式。

SessionDao:  通過SessionDao管理session資料,針對個性化的session資料儲存需要使用sessionDao。

cache Manager:快取管理器,主要對session和授權資料進行快取,比如將授權資料通過cacheManager進行快取管理,和ehcache整合對快取資料進行管理。

realm:域,領域,相當於資料來源,通過realm存取認證、授權相關資料。

注意:在realm中儲存授權和認證的邏輯。

cryptography:密碼管理,提供了一套加密/解密的元件,方便開發。比如提供常用的雜湊、加/解密等功能。

比如 md5雜湊演算法。

認證過程

  認證執行流程 1、通過ini配置檔案建立securityManager

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

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

4、ModularRealmAuthenticator呼叫IniRealm(給realm傳入token) 去ini配置檔案中查詢使用者資訊

5、IniRealm根據輸入的token(UsernamePasswordToken)從 shiro.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)

授權流程

授權流程

1、對subject進行授權,呼叫方法isPermitted("permission串")

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

3、ModularRealmAuthorizer執行realm(自定義的Realm)從資料庫查詢許可權資料

呼叫realm的授權方法:doGetAuthorizationInfo

4、realm從資料庫查詢許可權資料,返回ModularRealmAuthorizer

5、ModularRealmAuthorizer呼叫PermissionResolver進行許可權串比對