Apache Shiro 核心概念

Apache Shiro 架構(gòu)提出了3個核心概念:SubjectSecurityManager,Realms


Subject

特指【當(dāng)前用戶】,這里的【用戶】可以是實體世界的用戶(人),也可以是第三方進程、守護進程或類似概念,代表【當(dāng)前正在與軟件進行交互的任何事物】。可以使用如下代碼獲取 Subject

import org.apache.shiro.subject.Subject;
import org.apache.shiro.SecurityUtils;
...
Subject currentUser = SecurityUtils.getSubject();

一旦獲取 Subject 后便可以執(zhí)行諸如登錄、注銷、訪問會話、執(zhí)行授權(quán)檢查等 Shiro 負(fù)責(zé)的功能。


SecurityManager

Subject 對應(yīng) SecurityManager,Subject 代表當(dāng)前用戶的安全操作,而 SecurityManager 管理所有用戶的安全操作。SecurityManager 是 Shiro 架構(gòu)的核心,引用了許多 Shiro 生成的內(nèi)部嵌套的安全組件,這些組件構(gòu)成了一副對象圖。一旦 SecurityManager 配置完成,應(yīng)用開發(fā)人員只需關(guān)注 Subject API。

如何配置 SecurityManager 取決于開發(fā)應(yīng)用類型和環(huán)境,譬如 Web 應(yīng)用通常在 web.xml 中添加 Shiro Servlet Filter,應(yīng)用啟動會自動生成 SecurityManager 實例。基于 Spring 或 Spring Boot 開發(fā)則更加簡單,只需通過 XML 或 Java Config 注入一個 SecurityManager 實例即可。

通常來說 SecurityManager 是以單例形式存在于應(yīng)用中。


Realms

一個 Realm 充當(dāng) Shiro 與應(yīng)用程序安全數(shù)據(jù)間的【橋接器】。Shiro 會從已配置的一個或多個 Realm 中查找用于執(zhí)行身份驗證與授權(quán)等安全操作需要的安全數(shù)據(jù),如用戶賬戶。

Realm 本質(zhì)上是一種安全相關(guān)的 DAO(Data Access Object)。配置Shiro時,必須至少指定一個 Realm 用于身份驗證和/或授權(quán),當(dāng)然也可以配置多個,但至少需要一個。

Shiro 本身提供了許多開箱即用的 Realms,可以連接到不同的安全數(shù)據(jù)源,如 LDAPJDBC、INI、PROPERTIES 等。開發(fā)人員可以植入基于特定實現(xiàn)的 Realm 表示自定義數(shù)據(jù)源。

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

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

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