国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Shiro實戰(二)Shiro認證原理

Channe / 2819人閱讀

摘要:認證原理與認證就是進行身份確認的過程,也就是用戶對應中的需要提供證明來證實自己的身份。是的頂級抽象實現類,主要用于處理認證操作,至于授權等操作則交由該類的子類去處理。至此,認證的整體過程與底層邏輯已經全部介紹完畢。

在上篇Shiro核心概念中,我們介紹了Shiro的三大核心概念:Subject、SecurityManager、Realms,并通過示例代碼QuickStart展示常用的認證、鑒權、退出的操作。

本篇我們將深入到Shiro的源碼中,探究Shiro底層實現認證的過程,做到“知其然知其所以然”。

1 認證原理

1.1 Principals與Credentials

認證就是進行身份確認的過程,也就是用戶(對應Shiro中的Subject)需要提供證明來證實自己的身份。就像到自動取款機取款,持有銀行卡的人就可以理解為此處的用戶,銀行卡的取款密碼就是證明材料,如果輸入正確的密碼,就可以進行取款。在這個過程中,有兩個概念,用戶和證明材料,對應Shiro中的就分別是Principals與Credentials。

1.2 認證步驟

要進行認證,我們需要先收集用戶的Principals與Credentials,比如用戶通過頁面上的表單提交用戶名和密碼,APP用戶通過提交手機號與短信驗證碼,然后交由服務端進行處理。

①服務端首先收集Principals與Credentials,對應Shiro的代碼

</>復制代碼

  1. UsernamePasswordToken token = new UsernamePasswordToken("username", "passwd");

這里我們使用Shiro中通過的用戶名/密碼認證方式,或者你可以實現AuthenticationToken接口來自定義

②接下來進行提交,對應代碼

</>復制代碼

  1. Subject currentUser = SecurityUtils.getSubject();
  2. currentUser.login(token);

③認證結果

</>復制代碼

  1. if (currentUser.isAuthenticated()) {
  2. // success do something
  3. } else {
  4. // fail throw exception
  5. }

1.3 認證原理

在了解了Shiro認證過程的基本代碼操作后,我們來看下底層是到底如何實現。首先我們先通過Shiro官方給出的一張認證流程圖來作全局的了解,看看底層認證都涉及到了哪些東西。

① 獲取Subject對象,如果還不了解如何獲取Subject對象,可以回頭去看下我們第一篇文章的介紹,或者下載示例代碼進行了解;然后收集用戶的認證資料,調用Subject對象的login(token)方法。

DelegatingSubject作為Subject的實現,本身并不負責處理認證與授權的邏輯,而是將方法的調用傳遞給底層的SecurityManager,本質上說,DelegatingSubject只是SecurityManager的代理類,①中login(token)方法的調用,本質上調用調用的是SecurityManager接口的login(token)方法,而DefaultSecurityManager作為SecurityManager的默認實現,將調用Authenticator進行認證邏輯處理

Authenticator接口是Shiro API中的主要入口之一,就是用來負責應用中的認證操作的,該類作為頂級接口,只有一個authenticate(AuthenticationToken token)方法,而ModularRealmAuthenticator作為Shiro默認的認證處理實現類將會接過認證處理的槍,通過doAuthenticate(AuthenticationToken token)來進行認證操作,源碼如下

</>復制代碼

  1. Collection realms = getRealms();
  2. if (realms.size() == 1) {
  3. return doSingleRealmAuthentication(realms.iterator().next(), authenticationToken);
  4. } else {
  5. return doMultiRealmAuthentication(realms, authenticationToken);
  6. }

④ 通過情況下應用中會使用單個的Realm來進行認證授權處理,但是強大的Shiro卻支持配置多個Realm,在多個Realm對象存在的情況下,就需要指定認證策略AuthenticationStrategy ,Shiro提供了三種具體的認證策略實現

</>復制代碼

  1. AtLeastOneSuccessfulStrategy:ModularRealmAuthenticator的默認實現,多個Realm中,如果有一個或以上認證通過,就表示認證成功
  2. FirstSuccessfulStrategy:只使用第一個認證通過的Realm返回的信息,后面的Realm將會被忽略
  3. AllSuccessfulStrategy:所有Realm認證通過才算認證成功,否則認證失敗

⑤ 通過Realm進行認證最終的邏輯判斷,我們此處以應用只存在單個Realm來進行介紹。Realm首先會通過realm.supports(token)進行驗證,驗證Realm是否支持對應的token進行認證操作,如果返回true,將會進行認證邏輯處理,否則直接忽略認證邏輯,如果我們的應用只想處理授權,可以自定義Realm,并將supports方法返回false即可。

Realm會通過token與INI配置文件中的配置項進行對比,或者與我們數據庫存儲的數據進行對比,如果相同則認證通過。

下一小節,我們將通過IniRealm來介紹Shiro是如何進行認證邏輯判斷的

1.4 IniRealm認證實現

在上篇文章中,我們提到,Shiro默認使用IniRealm,但是前提是我們在INI配置中指定了[users]或[roles]有效配置數據,否則就會用配置中指定的securityManager的realms,如果兩者都沒有指定那么就會拋出錯誤,因為Shiro應用,至少要配置一個Realm

IniRealm在初始化onInit()時,會將已經加載的INI文件中的[users]、[roles]配置進行處理,分別轉換為SimpleRole、SimpleAccount,再將SimpleAccount與SimpleRole進行綁定,至此,IniRealm對INI配置文件處理已經完畢。

但是認證的操作并沒有完成,IniRealm仍需要與傳遞過來的token進行對比,判斷是否相同,具體的判斷邏輯交由AuthenticatingRealm來進行。

1.5 AuthenticatingRealm

AuthenticatingRealm是Realm的頂級抽象實現類,主要用于處理認證操作,至于授權等操作則交由該類的子類去處理。

AuthenticatingRealm拿到token后,會先去緩存中查找是否存在對應的認證信息,如果存在直接使用緩存中的認證信息與token進行比對,如果緩存中不存在,則直接獲取IniRealm中的認證信息進行比對,比對通過后,返回認證成功的Subject對象。

至此,認證的整體過程與底層邏輯已經全部介紹完畢。如果文章有什么不足之處,或者說的不正確的地方,也希望各位小伙伴們與我聯系和溝通。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67441.html

相關文章

  • Shiro實戰(三)Shiro授權(上)

    摘要:授權三大要素是安全框架中最原子性的元素,它用來描述能夠做什么或者說能夠執行什么樣的操作,比如刪除用戶查看用戶詳情查看商品詳情等。用戶就是我們之前提到的三大核心概念之一的。 在上篇Shiro認證原理的最后,我們介紹了IniRealm是如何進行認證,本篇我們將介紹Shiro授權過程中的幾個概念以及Shiro編程式的授權操作,并通過常用的用戶、角色、權限授權模式來加深理解授權的過程。 1 授...

    sushi 評論0 收藏0
  • Shiro權限管理()——認證

    摘要:我認為無論是也好,還是其他安全框架也好,其功能主要就分為三部分認證授權加密。的認證授權管理,都需要由負責。構建環境主體提交認證請求認證創建環境,我們這里使用的是。最后我們使用進行認證。認證我們先說這么多,下節我們來說說的簡單授權。 showImg(https://segmentfault.com/img/bV8VRT?w=800&h=119); 時隔這么久終于有時間更新了,今天和大家分...

    you_De 評論0 收藏0
  • Spring Security

    摘要:框架具有輕便,開源的優點,所以本譯見構建用戶管理微服務五使用令牌和來實現身份驗證往期譯見系列文章在賬號分享中持續連載,敬請查看在往期譯見系列的文章中,我們已經建立了業務邏輯數據訪問層和前端控制器但是忽略了對身份進行驗證。 重拾后端之Spring Boot(四):使用JWT和Spring Security保護REST API 重拾后端之Spring Boot(一):REST API的搭建...

    keelii 評論0 收藏0
  • Shiro實戰(一) Shiro核心概念

    摘要:是什么是功能強大簡單易用的安全框架,核心功能包括認證授權加密以及管理。的主要作用就是用來執行認證和授權的邏輯,它其實就相當于與安全數據用戶賬號密碼角色權限之間進行交互的橋梁。至此,的三個核心概念已經介紹完畢。 1、Shiro是什么 Shiro是功能強大、簡單易用的Java安全框架,核心功能包括:認證、授權、加密以及Session管理。Shiro的應用范圍很廣泛,小型移動端應用、大型We...

    mdluo 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<