天天看點

shiro初步 shiro認證Jar包shiro認證流程

什麼是shiro

shiro是apache的一個開源架構,是一個權限管理的架構,實作 使用者認證、使用者授權。

spring中有spring security (原名acegi),是一個權限架構,它和spring依賴過于緊密,沒有shiro使用簡單。

shiro不依賴于spring,shiro不僅可以實作 web應用的權限管理,還可以實作c/s系統,分布式系統權限管理,shiro屬于輕量架構,越來越多企業項目開始使用shiro。

使用shiro實作系統 的權限管理,有效提高開發效率,進而降低開發成本。

<a href="http://download.csdn.net/detail/bug_moving/9737881">shrio基礎jar包</a>

shiro架構

shiro初步 shiro認證Jar包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雜湊演算法。

shiro初步 shiro認證Jar包shiro認證流程
shiro初步 shiro認證Jar包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初步 shiro認證Jar包shiro認證流程

需要在shiro-realm.ini配置realm注入到securitymanager中

通常需要對密碼 進行散列,常用的有md5、sha,

對md5密碼,如果知道散列後的值可以通過窮舉算法,得到md5密碼對應的明文。

建議對md5進行散列時加salt(鹽),進行加密相當 于對原始密碼+鹽進行散列。

正常使用時散列方法:

在程式中對原始密碼+鹽進行散列,将散列值存儲到資料庫中,并且還要将鹽也要存儲在資料庫中。

如果進行密碼對比時,使用相同 方法,将原始密碼+鹽進行散列,進行比對。

在realm中配置憑證比對器