国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > Apache > 正文

Apache Shiro 使用手冊(二) Shiro 認證

2024-08-27 18:24:14
字體:
來源:轉載
供稿:網友
認證就是驗證用戶身份的過程。在認證過程中,用戶需要提交實體信息(Principals)和憑據信息(Credentials)以檢驗用戶是否合法。最常見的“實體/憑證”組合便是“用戶名/密碼”組合

一、Shiro認證過程

1、收集實體/憑據信息

復制代碼 代碼如下:
//Example using most common scenario of username/password pair:
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
//”Remember Me” built-in:
token.setRememberMe(true);

UsernamePasswordToken支持最常見的用戶名/密碼的認證機制。同時,由于它實現了RememberMeAuthenticationToken接口,我們可以通過令牌設置“記住我”的功能。
但是,“已記住”和“已認證”是有區別的:
已記住的用戶僅僅是非匿名用戶,你可以通過subject.getPrincipals()獲取用戶信息。但是它并非是完全認證通過的用戶,當你訪問需要認證用戶的功能時,你仍然需要重新提交認證信息。
這一區別可以參考亞馬遜網站,網站會默認記住登錄的用戶,再次訪問網站時,對于非敏感的頁面功能,頁面上會顯示記住的用戶信息,但是當你訪問網站賬戶信息時仍然需要再次進行登錄認證。

2、提交實體/憑據信息

復制代碼 代碼如下:
Subject currentUser = SecurityUtils.getSubject();
currentUser.login(token);

收集了實體/憑據信息之后,我們可以通過SecurityUtils工具類,獲取當前的用戶,然后通過調用login方法提交認證。

3、認證處理

復制代碼 代碼如下:
try {
    currentUser.login(token);
} catch ( UnknownAccountException uae ) { ...
} catch ( IncorrectCredentialsException ice ) { ...
} catch ( LockedAccountException lae ) { ...
} catch ( ExcessiveAttemptsException eae ) { ...
} ... catch your own ...
} catch ( AuthenticationException ae ) {
    //unexpected error?
}

如果login方法執行完畢且沒有拋出任何異常信息,那么便認為用戶認證通過。之后在應用程序任意地方調用SecurityUtils.getSubject() 都可以獲取到當前認證通過的用戶實例,使用subject.isAuthenticated()判斷用戶是否已驗證都將返回true.
相反,如果login方法執行過程中拋出異常,那么將認為認證失敗。Shiro有著豐富的層次鮮明的異常類來描述認證失敗的原因,如代碼示例。

二、登出操作

登出操作可以通過調用subject.logout()來刪除你的登錄信息,如:

復制代碼 代碼如下:
currentUser.logout(); //removes all identifying information and invalidates their session too.

當執行完登出操作后,Session信息將被清空,subject將被視作為匿名用戶。

三、認證內部處理機制

以上,是Shiro認證在應用程序中的處理過程,下面將詳細解說Shiro認證的內部處理機制。





如上圖,我們通過Shiro架構圖的認證部分,來說明Shiro認證內部的處理順序:

1、應用程序構建了一個終端用戶認證信息的AuthenticationToken 實例后,調用Subject.login方法。
2、Sbuject的實例通常是DelegatingSubject類(或子類)的實例對象,在認證開始時,會委托應用程序設置的securityManager實例調用securityManager.login(token)方法。
3、SecurityManager接受到token(令牌)信息后會委托內置的Authenticator的實例(通常都是ModularRealmAuthenticator類的實例)調用authenticator.authenticate(token). ModularRealmAuthenticator在認證過程中會對設置的一個或多個Realm實例進行適配,它實際上為Shiro提供了一個可拔插的認證機制。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 商洛市| 大理市| 三穗县| 峨眉山市| 玛多县| 永仁县| 永泰县| 岳阳市| 历史| 金溪县| 剑阁县| 嘉义县| 秦安县| 上栗县| 兰西县| 集贤县| 宣武区| 桃江县| 六安市| 锦屏县| 柳林县| 邓州市| 亚东县| 曲阜市| 扬州市| 三明市| 丹棱县| 六枝特区| 新昌县| 唐河县| 海门市| 河津市| 长子县| 勐海县| 大足县| 永清县| 沙洋县| 沙洋县| 衡阳县| 邹平县| 五指山市|