一、背景
shiro是apache的一個開源框架,是一個權(quán)限管理的框架,實現(xiàn) 用戶認(rèn)證、用戶授權(quán)。
二、架構(gòu)

- Authenticator:認(rèn)證器,主體進(jìn)行認(rèn)證最終通過authenticator進(jìn)行
- Authorizer:授權(quán)器,主體進(jìn)行授權(quán)最終通過authorizer進(jìn)行sessionManager:web應(yīng)用中一般是用web容器對session進(jìn)行管理,shiro也提供了一套session管理方式
- SessionDao:通過SessionDao管理session數(shù)據(jù),以下是SessionDao的方法
- Cache Manager:緩存管理器,主要對session和授權(quán)數(shù)據(jù)進(jìn)行緩存,比如將授權(quán)數(shù)據(jù)通過cacheManager進(jìn)行緩存管理,和ehcache整合對緩存數(shù)據(jù)進(jìn)行管理。
三、核心組件
三個核心組件:Subject, SecurityManager 和 Realms.
Subject:即"當(dāng)前操作用戶"。但是,在Shiro中,Subject這一概念并不僅僅指人,也可以是第三方進(jìn)程、后臺帳戶(Daemon Account)或其他類似事物。它僅僅意味著"當(dāng)前跟軟件交互的東西"。但考慮到大多數(shù)目的和用途,你可以把它認(rèn)為是Shiro的"用戶"概念。
Subject代表了當(dāng)前用戶的安全操作,SecurityManager則管理所有用戶的安全操作。
SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通過SecurityManager來管理內(nèi)部組件實例,并通過它來提供安全管理的各種服務(wù)。
Realm: Realm充當(dāng)了Shiro與應(yīng)用安全數(shù)據(jù)間的"橋梁"或者"連接器"。也就是說,當(dāng)對用戶執(zhí)行認(rèn)證(登錄)和授權(quán)(訪問控制)驗證時,Shiro會從應(yīng)用配置的Realm中查找用戶及其權(quán)限信息。
從這個意義上講,Realm實質(zhì)上是一個安全相關(guān)的DAO:它封裝了數(shù)據(jù)源的連接細(xì)節(jié),并在需要時將相關(guān)數(shù)據(jù)提供給Shiro。當(dāng)配置Shiro時,你必須至少指定一個Realm,用于認(rèn)證和(或)授權(quán)。配置多個Realm是可以的,但是至少需要一個。
Shiro內(nèi)置了可以連接大量安全數(shù)據(jù)源(又名目錄)的Realm,如LDAP、關(guān)系數(shù)據(jù)庫(JDBC)、類似INI的文本配置資源以及屬性文件等。如果缺省的Realm不能滿足需求,你還可以插入代表自定義數(shù)據(jù)源的自己的Realm實現(xiàn)。
四、提供的功能

Authentication:用戶認(rèn)證(登錄)
Authorization:權(quán)限控制
Session Management:會話管理
Cryptography:數(shù)據(jù)加密
Web Support:支持web的API
Caching:緩存
Concurrency:支持多線程應(yīng)用程序
Testing:測試的支持
“Run As”:假設(shè)一個用戶為另一個用戶的身份
“Remember Me”:在Session中保存用戶身份