簡介
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認證執(zhí)行流程是創(chuàng)建SecurityManager之后主體提交認證,Security內(nèi)部調(diào)用Authenticator進行認證,Authenticator內(nèi)部調(diào)用Realm進行驗證。
簡單教程
下面創(chuàng)建一個maven項目來演示Shiro基本流程,以及簡單的源碼處理流程跟蹤。
項目如下:

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

簡單的實現(xiàn)一下登陸驗證,整個流程是創(chuàng)建默認SecurityManager,以及SimpleAccountRealm,注冊Realm,打開Subject,將UsernamePasswordToken作為subject登陸主題,完成登陸驗證。
結(jié)合JunitTest進行簡單測試,在登陸和登出前后分別斷言預測Authenticate是否為true。
最終結(jié)果顯示login之后為true,logout登出之后為false。
源碼解析




整個代碼執(zhí)行鏈與流程圖一致。
至此Apache Shiro的簡單介紹就結(jié)束了,下節(jié)開始將逐步系統(tǒng)講解Shiro作為權限安全框架的各個模塊。