Apache Shiro (一:入門)

簡介

Apache Shiro是一個強大且易用的Java安全框架,執(zhí)行身份驗證、授權、密碼學和會話管理。

核心組件

三個核心組件:Subject, SecurityManager 和 Realms.

Subject:即“當前操作用戶”。但是,在Shiro中,Subject這一概念并不僅僅指人,也可以是第三方進程、后臺帳戶(Daemon Account)或其他類似事物。它僅僅意味著“當前跟軟件交互的東西”。但考慮到大多數(shù)目的和用途,你可以把它認為是Shiro的“用戶”概念。

Subject代表了當前用戶的安全操作,SecurityManager則管理所有用戶的安全操作。

SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通過SecurityManager來管理內(nèi)部組件實例,并通過它來提供安全管理的各種服務。

Realm: Realm充當了Shiro與應用安全數(shù)據(jù)間的“橋梁”或者“連接器”。也就是說,當對用戶執(zhí)行認證(登錄)和授權(訪問控制)驗證時,Shiro會從應用配置的Realm中查找用戶及其權限信息。

從這個意義上講,Realm實質(zhì)上是一個安全相關的DAO:它封裝了數(shù)據(jù)源的連接細節(jié),并在需要時將相關數(shù)據(jù)提供給Shiro。當配置Shiro時,你必須至少指定一個Realm,用于認證和(或)授權。配置多個Realm是可以的,但是至少需要一個。

Shiro內(nèi)置了可以連接大量安全數(shù)據(jù)源(又名目錄)的Realm,如LDAP、關系數(shù)據(jù)庫(JDBC)、類似INI的文本配置資源以及屬性文件等。如果缺省的Realm不能滿足需求,你還可以插入代表自定義數(shù)據(jù)源的自己的Realm實現(xiàn)。


整體架構(gòu)


執(zhí)行流程


Shiro認證流程

如圖所示: Shiro認證執(zhí)行流程是創(chuàng)建SecurityManager之后主體提交認證,Security內(nèi)部調(diào)用Authenticator進行認證,Authenticator內(nèi)部調(diào)用Realm進行驗證。


簡單教程

下面創(chuàng)建一個maven項目來演示Shiro基本流程,以及簡單的源碼處理流程跟蹤。

項目如下:


root項目

在root項目中建一個module,shirotest project


shirotest module

簡單的實現(xiàn)一下登陸驗證,整個流程是創(chuàng)建默認SecurityManager,以及SimpleAccountRealm,注冊Realm,打開Subject,將UsernamePasswordToken作為subject登陸主題,完成登陸驗證。

結(jié)合JunitTest進行簡單測試,在登陸和登出前后分別斷言預測Authenticate是否為true。

最終結(jié)果顯示login之后為true,logout登出之后為false。


源碼解析



Subject login源碼



SecurityManager源碼



ModularRealmAuthenticator源碼


整個代碼執(zhí)行鏈與流程圖一致。

至此Apache Shiro的簡單介紹就結(jié)束了,下節(jié)開始將逐步系統(tǒng)講解Shiro作為權限安全框架的各個模塊。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容