Apache Shiro 核心概念

jopen 12年前發布 | 25K 次閱讀 Shiro 安全相關 Apache Shiro

Shiro框架中有三個核心概念:Subject ,SecurityManager和Realms。

 

2.1.1    Subject
Subject一詞是一個安全術語,其基本意思是“當前的操作用戶”。稱之為“用戶”并不準確,因為“用戶”一詞通常跟人相關。在安全領域,術語 “Subject”可以是人,也可以是第三方進程、后臺帳戶(Daemon Account)、定時作業(Corn Job)或其他類似事物。它僅僅意味著“當前跟軟件交互的東西”。但考慮到大多數目的和用途,你可以把它認為是Shiro的“用戶”概念。

在程序中你都能輕易的獲得Subject,允許在任何需要的地方進行安全操作。每個Subject對象都必須與一個SecurityManager進行綁定,你訪問Subject對象其實都是在與SecurityManager里的特定Subject進行交互。

 

2.1.2    SecurityManager
Subject的“幕后”推手是SecurityManager。Subject代表了當前用戶的安全操作,SecurityManager則管理所有用戶的安全操作。它是Shiro框架的核心,充當“保護傘”,引用了多個內部嵌套安全組件,它們形成了對象圖。但是,一旦SecurityManager及其內部對象圖配置好,它就會退居幕后,應用開發人員幾乎把他們的所有時間都花在Subject API調用上。
那么,如何設置SecurityManager呢?嗯,這要看應用的環境。例如,Web應用通常會在Web.xml中指定一個Shiro Servlet Filter,這會創建SecurityManager實例,如果你運行的是一個獨立應用,你需要用其他配置方式,但有很多配置選項。
一個應用幾乎總是只有一個SecurityManager實例。它實際是應用的Singleton(盡管不必是一個靜態Singleton)。跟 Shiro里的幾乎所有組件一樣,SecurityManager的缺省實現是POJO,而且可用POJO兼容的任何配置機制進行配置 - 普通的Java代碼、Spring XML、YAML、.properties和.ini文件等。基本來講,能夠實例化類和調用JavaBean兼容方法的任何配置形式都可使用。

2.1.3    Realms
Shiro的第三個也是最后一個概念是Realm。Realm充當了Shiro與應用安全數據間的“橋梁”或者“連接器”。也就是說,當與像用戶帳戶這類安全相關數據進行交互,執行認證(登錄)和授權(訪問控制)時,Shiro會從應用配置的Realm中查找很多內容。
從這個意義上講,Realm實質上是一個安全相關的DAO:它封裝了數據源的連接細節,并在需要時將相關數據提供給Shiro。當配置Shiro時,你必須至少指定一個Realm,用于認證和(或)授權。配置多個Realm是可以的,但是至少需要一個。
Shiro內置了可以連接大量安全數據源(又名目錄)的Realm,如LDAP、關系數據庫(JDBC)、類似INI的文本配置資源以及屬性文件 等。如果缺省的Realm不能滿足需求,你還可以插入代表自定義數據源的自己的Realm實現。
象其他內部組件一樣,由SecurityManager來管理如何使用Realms來獲取安全的身份數據。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!