>
>
>
junitgroupid
>
>
junitartifactid
>
>
4.9version
>
dependency
>
>
>
commons-logginggroupid
>
>
commons-loggingartifactid
>
>
1.1.3version
>
dependency
>
>
>
org.apache.shirogroupid
>
>
shiro-coreartifactid
>
>
1.2.2version
>
dependency
>
dependencies
>
1.、首先準備一些使用者身份/憑據(shiro.ini)
[users]
zhang=123
wang=123
此處使用ini配置檔案,通過[user]指定了兩個主體:zhang/123、wang/123
2、測試用例
@test
public
void
testhelloworld()
catch
(authenticationexception e)
assert.
assertequals
(true
, subject.
isauthenticated()
);//斷言使用者已經登入
//6、退出
subject.
logout()
;}
2.1、首先通過 new inisecuritymanage***ctory 並指定乙個 ini 配置檔案來建立乙個securitymanager 工廠;
2.2、接著獲取 securitymanager 並繫結到 securityutils,這是乙個全域性設定,設定一次即可;
2.3、通過 securityutils 得到 subject,其會自動繫結到當前執行緒;如果在 web 環境在請求結束時需要解除繫結;然後獲取身份驗證的token,如使用者名稱/密碼;
2.4、呼叫 subject.login 方法進行登入,其會自動委託給 securitymanager.login 方法進行登入;
2.5 、 如 果 身份驗證 失敗請捕 獲 authenticationexception 或 其 子 類 , 常 見 的 如 :
disabledaccountexception(禁用的帳號)、lockedaccountexception(鎖定的帳號)、unknownaccountexception(錯誤的帳號)、excessiveattempt***ception(登入失敗次數過 多)、incorrectcredential***ception (錯誤的憑證)、expiredcredential***ception(過期的 憑證)等,具體請檢視其繼承關係;對於頁面的錯誤訊息展示,最好使用如「使用者名稱/密碼錯誤」而不是「使用者名稱錯誤」/「密碼錯誤」,防止一些惡意使用者非法掃瞄帳號庫;
2.6、最後可以呼叫 subject.logout 退出,其會自動委託給 securitymanager.logout 方法退出。
從如上**可總結出身份驗證的步驟:
1、收集使用者身份/憑證,即如使用者名稱/密碼;
2、呼叫 subject.login 進行登入,如果失敗將得到相應的 authenticationexception 異常,根據異常提示使用者錯誤資訊;否則登入成功;
3、最後呼叫 subject.logout 進行退出操作。
流程如下:
1、首先呼叫 subject.login(token)進行登入,其會自動委託給 security manager,呼叫之前必須通過 securityutils. setsecuritymanager()設定;
2、securitymanager 負責真正的身份驗證邏輯;它會委託給 authenticator 進行身份驗證;
3、authenticator 才是真正的身份驗證者,shiro api 中核心的身份認證入口點,此處可以自定義插入自己的實現;
4、authenticator 可能會委託給相應的 authenticationstrategy 進行多 realm 身份驗證,預設modularrealmauthenticator 會呼叫 authenticationstrategy 進行多 realm 身份驗證;
5、authenticator 會把相應的 token 傳入 realm,從 realm 獲取身份驗證資訊,如果沒有返 回/丟擲異常表示身份驗證失敗了。此處可以配置多個 realm,將按照相應的順序及策略進行訪問。
realm:域,shiro 從 realm 獲取安全資料(如使用者、角色、許可權),就是說 securitymanager要驗證使用者身份,那麼它需要從 realm 獲取相應的使用者進行比較以確定使用者身份是否合法;也需要從 realm 得到使用者相應的角色/許可權進行驗證使用者是否能進行操作;可以把 realm 看 成 datasource 即安全資料來源 。如我們之前的ini配置方式將使用 org.apache.shiro.realm.text.inirealm。
public
class
myrealm1
implements
realm
@override
public
boolean
supports
(authenticationtoken token)
@override
public authenticationinfo getauthenticationinfo
(authenticationtoken token)
throws authenticationexception if(
!"123"
.equals
(password)
)//如果身份認證驗證成功,返回乙個 authenticationinfo 實現;
return
new******authenticationinfo
(username, password,
getname()
);}}
2、ini 配置檔案指定自定義 realm 實現(shiro-realm.ini)
# 宣告乙個 realm
myrealm1=com.github.zhangkaitao.shiro.chapter2.realm.myrealm1
# 指定 securitymanager 的 realms 實現
securitymanager.realms=$myrealm1
通過$name 來引入之前的 realm 定義。 一 Shiro 身份驗證
一.shiro 身份驗證 principals 身份,即主體的標識屬性,可以是任何東西,如使用者名稱 郵箱等,唯一即可。乙個主體可以有多個 principals,但只有乙個 primary principals,一般是使用者名稱 密碼 手機號。credentials 證明 憑證,即只有主體知道的安全...
Shiro 二 身份驗證基本流程
簡介 在 shiro 中,使用者需要提供 principals 身份 和 credentials 證明 給 shiro,從而應用能驗證使用者身份 principals 身份,即主體的標識屬性,可以是任何東西,如使用者名稱 郵箱等,唯一即可。乙個主體可以有多個 principals,但只有乙個 pri...
Forms 身份驗證
配置應用程式使用 forms 身份驗證 如果應用程式的根目錄中有 web.config 檔案,請開啟該檔案。複製 在system.web元素中,建立乙個authentication元素,並將它的mode屬性設定為 forms,如下面的示例所示 複製 在authentication元素中,建立乙個fo...