一、背景
shiro是apache的一個開源框架,是一個權限管理的框架,實現 用戶認證、用戶授權。
二、架構
- Authenticator:認證器,主體進行認證最終通過authenticator進行
- Authorizer:授權器,主體進行授權最終通過authorizer進行sessionManager:web應用中一般是用web容器對session進行管理,shiro也提供了一套session管理方式
- SessionDao:通過SessionDao管理session數據,以下是SessionDao的方法
- Cache Manager:緩存管理器,主要對session和授權數據進行緩存,比如將授權數據通過cacheManager進行緩存管理,和ehcache整合對緩存數據進行管理。
三、核心組件
三個核心組件:Subject, SecurityManager 和 Realms.
Subject:即"當前操作用戶"。但是,在Shiro中,Subject這一概念并不僅僅指人,也可以是第三方進程、后臺帳戶(Daemon Account)或其他類似事物。它僅僅意味著"當前跟軟件交互的東西"。但考慮到大多數目的和用途,你可以把它認為是Shiro的"用戶"概念。
Subject代表了當前用戶的安全操作,SecurityManager則管理所有用戶的安全操作。
SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通過SecurityManager來管理內部組件實例,并通過它來提供安全管理的各種服務。
Realm: Realm充當了Shiro與應用安全數據間的"橋梁"或者"連接器"。也就是說,當對用戶執行認證(登錄)和授權(訪問控制)驗證時,Shiro會從應用配置的Realm中查找用戶及其權限信息。
從這個意義上講,Realm實質上是一個安全相關的DAO:它封裝了數據源的連接細節,并在需要時將相關數據提供給Shiro。當配置Shiro時,你必須至少指定一個Realm,用于認證和(或)授權。配置多個Realm是可以的,但是至少需要一個。
Shiro內置了可以連接大量安全數據源(又名目錄)的Realm,如LDAP、關系數據庫(JDBC)、類似INI的文本配置資源以及屬性文件等。如果缺省的Realm不能滿足需求,你還可以插入代表自定義數據源的自己的Realm實現。
四、提供的功能
Authentication:用戶認證(登錄)
Authorization:權限控制
Session Management:會話管理
Cryptography:數據加密
Web Support:支持web的API
Caching:緩存
Concurrency:支持多線程應用程序
Testing:測試的支持
“Run As”:假設一個用戶為另一個用戶的身份
“Remember Me”:在Session中保存用戶身份