内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Shiro的登錄流程以及Realm的簡(jiǎn)單介紹

本篇內(nèi)容介紹了“Shiro的登錄流程以及Realm的簡(jiǎn)單介紹”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

為井陘等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及井陘網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、井陘網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

 

登錄流程是什么樣的

首先我們來(lái)看 shiro 官方文檔中這樣一張登錄流程圖:

Shiro的登錄流程以及Realm的簡(jiǎn)單介紹  

參照此圖,我們的登錄一共要經(jīng)過如下幾個(gè)步驟:

  1. 應(yīng)用程序代碼調(diào)用 Subject.login 方法,傳遞創(chuàng)建好的包含終端用戶的 Principals(身份)和 Credentials(憑證)的 AuthenticationToken 實(shí)例(即上文例子中的 UsernamePasswordToken)。

  2. Subject 實(shí)例,通常是 DelegatingSubject(或子類)委托應(yīng)用程序的 SecurityManager 通過調(diào)用 securityManager.login(token) 開始真正的驗(yàn)證工作(在 DelegatingSubject 類的 login 方法中打斷點(diǎn)即可看到)。

  3. SubjectManager 作為一個(gè)基本的“保護(hù)傘”的組成部分,接收 token 以及簡(jiǎn)單地委托給內(nèi)部的 Authenticator 實(shí)例通過調(diào)用 authenticator.authenticate(token)。這通常是一個(gè) ModularRealmAuthenticator 實(shí)例,支持在身份驗(yàn)證中協(xié)調(diào)一個(gè)或多個(gè) Realm 實(shí)例。ModularRealmAuthenticator 本質(zhì)上為 Apache Shiro 提供了 PAM-style 范式(其中在 PAM 術(shù)語(yǔ)中每個(gè) Realm 都是一個(gè)'module')。

  4. 如果應(yīng)用程序中配置了一個(gè)以上的 Realm,ModularRealmAuthenticator 實(shí)例將利用配置好的 AuthenticationStrategy 來(lái)啟動(dòng) Multi-Realm 認(rèn)證嘗試。在 Realms 被身份驗(yàn)證調(diào)用之前,期間和以后,AuthenticationStrategy 被調(diào)用使其能夠?qū)γ總€(gè) Realm 的結(jié)果作出反應(yīng)。如果只有一個(gè)單一的 Realm  被配置,它將被直接調(diào)用,因?yàn)闆]有必要為一個(gè)單一 Realm 的應(yīng)用使用 AuthenticationStrategy。

  5. 每個(gè)配置的 Realm 用來(lái)幫助看它是否支持提交的 AuthenticationToken。如果支持,那么支持 Realm 的 getAuthenticationInfo 方法將會(huì)伴隨著提交的 token 被調(diào)用。

OK,通過上面的介紹,相信小伙伴們對(duì)整個(gè)登錄流程都有一定的理解了,小伙伴可以通過打斷點(diǎn)來(lái)驗(yàn)證我們上文所說(shuō)的五個(gè)步驟。那么在上面的五個(gè)步驟中,小伙伴們看到了有一個(gè) Realm 承擔(dān)了很重要的一部分工作,那么這個(gè) Realm 到底是個(gè)什么東西,接下來(lái)我們就來(lái)仔細(xì)看一看。

 

什么是 Realm

根據(jù) Realm 文檔上的解釋,Realms 擔(dān)當(dāng) Shiro 和你的應(yīng)用程序的安全數(shù)據(jù)之間的“橋梁”或“連接器”。當(dāng)它實(shí)際上與安全相關(guān)的數(shù)據(jù)如用來(lái)執(zhí)行身份驗(yàn)證(登錄)及授權(quán)(訪問控制)的用戶帳戶交互時(shí),Shiro 從一個(gè)或多個(gè)為應(yīng)用程序配置的 Realm 中尋找許多這樣的東西。在這個(gè)意義上說(shuō),Realm  本質(zhì)上是一個(gè)特定安全的 DAO:它封裝了數(shù)據(jù)源的連接詳細(xì)信息,使 Shiro 所需的相關(guān)的數(shù)據(jù)可用。當(dāng)配置 Shiro 時(shí),你必須指定至少一個(gè) Realm 用來(lái)進(jìn)行身份驗(yàn)證和/或授權(quán)。SecurityManager 可能配置多個(gè) Realms,但至少有一個(gè)是必須的。Shiro 提供了立即可用的 Realms 來(lái)連接一些安全數(shù)據(jù)源(即目錄),如 LDAP,關(guān)系數(shù)據(jù)庫(kù)(JDBC),文本配置源,像 INI 及屬性文件,以及更多。你可以插入你自己的 Realm 實(shí)現(xiàn)來(lái)代表自定義的數(shù)據(jù)源,如果默認(rèn)地 Realm 不符合你的需求。

看了上面這一段解釋,可能還有小伙伴云里霧里,那么接下來(lái)我們來(lái)通過一個(gè)簡(jiǎn)單的案例來(lái)看看 Realm 到底扮演了一個(gè)什么樣的作用,注意,本文的案例在上文案例的基礎(chǔ)上完成。首先自定義一個(gè) MyRealm,內(nèi)容如下:

public class MyRealm implements Realm {
   public String getName() {
       return "MyRealm";
   }
   public boolean supports(AuthenticationToken token) {
       return token instanceof UsernamePasswordToken;
   }
   public AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
       String password = new String(((char[]) token.getCredentials()));
       String username = token.getPrincipal().toString();
       if (!"sang".equals(username)) {
           throw new UnknownAccountException("用戶不存在");
       }
       if (!"123".equals(password)) {
           throw new IncorrectCredentialsException("密碼不正確");
       }
       return new SimpleAuthenticationInfo(username, password, getName());
   }
}
 

自定義 Realm 實(shí)現(xiàn) Realm 接口,該接口中有三個(gè)方法,第一個(gè) getName 方法用來(lái)獲取當(dāng)前 Realm 的名字,第二個(gè) supports 方法用來(lái)判斷這個(gè) realm 所支持的 token,這里我假設(shè)值只支持 UsernamePasswordToken 類型的 token,第三個(gè) getAuthenticationInfo 方法則進(jìn)行了登陸邏輯判斷,從 token 中取出用戶的用戶名密碼等,進(jìn)行判斷,當(dāng)然,我這里省略掉了數(shù)據(jù)庫(kù)操作,當(dāng)?shù)卿涷?yàn)證出現(xiàn)問題時(shí),拋異常即可,這里拋出的異常,將在執(zhí)行登錄那里捕獲到(注意,由于我這里定義的 MyRealm 是實(shí)現(xiàn)了 Realm 接口,所以這里的用戶名和密碼都需要我手動(dòng)判斷是否正確,后面的文章我會(huì)介紹其他寫法)。

OK,創(chuàng)建好了 MyRealm 之后還不夠,我們還需要做一個(gè)簡(jiǎn)單配置,讓 MyRealm 生效,將 shiro.ini 文件中的所有東西都注釋掉,添加如下兩行:

MyRealm= org.sang.MyRealm
securityManager.realms=$MyRealm
    

“Shiro的登錄流程以及Realm的簡(jiǎn)單介紹”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

分享名稱:Shiro的登錄流程以及Realm的簡(jiǎn)單介紹
文章URL:http://www.rwnh.cn/article40/jsdieo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司ChatGPT、動(dòng)態(tài)網(wǎng)站、定制開發(fā)網(wǎng)站維護(hù)、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
分宜县| 朝阳县| 河池市| 溆浦县| 吕梁市| 永安市| 泰兴市| 东丰县| 建湖县| 防城港市| 淅川县| 玉林市| 乃东县| 新乐市| 康马县| 秦安县| 台南县| 西林县| 吴忠市| 大丰市| 温泉县| 宕昌县| 莲花县| 哈巴河县| 大兴区| 乐清市| 韶关市| 南部县| 蓝山县| 焉耆| 嘉善县| 久治县| 南雄市| 龙口市| 同仁县| 岱山县| 泸州市| 正蓝旗| 临西县| 贵州省| 荆门市|