1. 程式人生 > >Shiro框架基本概念

Shiro框架基本概念

1、Subject Subject一詞是一個安全術語,其基本意思是“當前的操作使用者”。稱之為“使用者”並不準確,因為“使用者”一詞通常跟人相關。在安全領域,術語“Subject”可以是人,也可以是第三方程序、後臺帳戶(Daemon Account)、定時作業(Corn Job)或其他類似事物。它僅僅意味著“當前跟軟體互動的東西”。但考慮到大多數目的和用途,你可以把它認為是Shiro的“使用者”概念。 在程式中你都能輕易的獲得Subject,允許在任何需要的地方進行安全操作。每個Subject物件都必須與一個SecurityManager進行繫結,你訪問Subject物件其實都是在與SecurityManager裡的特定Subject進行互動。

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相容方法的任何配置形式都可使用。

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