天天看點

shrio教程初級(四)shiro基礎(認證)一、前言二、shrio的jar包三、shrio的ini認證程式執行個體四、shrio的ini認證-realms自定義四、shrio的ini認證-realms自定義(加密)

前面我們通過url攔截器實作了權限驗證,功能齊全,開發難度也不大。但是為了更好的進行開發權限,開發我們選擇shrio,終于扯上正題了是不是?當你學習shrio你會發現,都是一樣的。嘎嘎

shiro使用廣泛,shiro可以運作在web應用,非web應用,叢集分布式應用中越來越多的使用者開始使用shiro。簡單好用用的人就多了哦。

首先一樣來個圖:

shrio教程初級(四)shiro基礎(認證)一、前言二、shrio的jar包三、shrio的ini認證程式執行個體四、shrio的ini認證-realms自定義四、shrio的ini認證-realms自定義(加密)

subject:使用者或者程式,可以是任何語言編寫。(這個跟uel攔截器一樣)

securityManager:安全管理器,對全部的subject進行安全管理,它是shiro的核心,負責對所有的subject進行安全管理。通過SecurityManager可以完成subject的認證、授權等,實質上SecurityManager是通過Authenticator進行認證,通過Authorizer進行授權,通過SessionManager進行會話管理等。它自身隻是一個接口。

Authentic:認證器,Authenticator是一個接口,shiro提供ModularRealmAuthenticator實作類,通過ModularRealmAuthenticator基本上可以滿足大多數需求,也可以自  定義認證器。(相當于ur權限l的登入攔截器哦)

Authorizer:Authorizer即授權器,使用者通過認證器認證通過,在通路功能時需要通過授權器判斷使用者是否有此功能的操作權限(相當于url權限系統的權限攔截器)。

sessionManager:即會話管理,shiro架構定義了一套會話管理,它不依賴web容器的session,是以shiro可以使用在非web應用上,也可以将分布式應用的會話集中在一點管理,此特性可使它實作單點登入。(相當于ur權限系統裡面自帶的httpsession,而它可以獨立)

sessionDao:SessionDAO即會話dao,是對session會話操作的一套接口,比如要将session存儲到資料庫,可以通過jdbc将會話存儲到資料庫。

realms:領域相當于datasource資料源,securityManager進行安全認證需要通過Realm擷取使用者權限資料,比如:如果使用者身份資料在資料庫那麼realm就需要從資料庫擷取使用者身份資訊。(相當于ur權限系統裡面自帶的mysql,而它還支援驗證)

注意:不要把realm了解成隻是從資料源取資料,在realm中還有認證授權校驗的相關的代碼。

cacheManager: CacheManager即緩存管理,将使用者權限資料存儲在緩存,這樣可以提高性能。

Cryptography:Cryptography即密碼管理,shiro提供了一套加密/解密的元件,友善開發。比如提供常用的散列、加/解密等功能。MD5即是散列(相當于ur權限系統裡面MD5)

就這麼完美的解釋,反正都是來自網絡,而且專業簡單的解釋。

或者就ok

項目分析

shrio教程初級(四)shiro基礎(認證)一、前言二、shrio的jar包三、shrio的ini認證程式執行個體四、shrio的ini認證-realms自定義四、shrio的ini認證-realms自定義(加密)

項目結構:

shrio教程初級(四)shiro基礎(認證)一、前言二、shrio的jar包三、shrio的ini認證程式執行個體四、shrio的ini認證-realms自定義四、shrio的ini認證-realms自定義(加密)

加入上面的jar包core包即可以

再加入日志檔案與包

shrio-frist.ini

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.apach e.shiro.authc.UnknownAccountException)

如果傳回的認證資訊不是null(說明inirealm找到了使用者),對IniRealm傳回使用者密碼 (在ini檔案中存在)和 token中的密碼 進行對比,如果不一緻抛出異常(org.apache.shiro.authc.IncorrectCredentialsException)

注意:1、是realm調用token資訊,進行驗證。

2、securityManager是調用ModularRealmAuthenticator進行認證傳回AuthenticationInfo認證資訊

我們知道realm就是資料源,即是我們經常說的各種資料庫,但是我們前面例子用的是ini檔案,我們現在來模拟一下用資料。(模拟)

自定義realm,繼承我們的AuthorizingRealm。因為AuthorizingRealm就是我們realm的一個實作類

這個ini檔案是制定我們的realms,而不再是指定資料

shrio-realm.ini

測試程式一樣沒有變,隻是現在執行認證的時候進行的是我們自己定義的realm的認證

測試結果一樣,就不用貼圖了。

隻需要在realm裡面寫入加密就ok