一、簡介
Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼和會話管理。使用Shiro的易於理解的API,您可以快速、輕鬆地獲得任何應用程序,從最小的移動應用程序到最大的網絡和企業應用程序。
二、核心架構
shiro的架構圖如下圖(該圖來自網絡),三個核心組件:Subject, SecurityManager 和 Realms.
Subject:即“當前操作用戶”。但是,在Shiro中,Subject這一概念並不僅僅指人,也可以是第三方進程、後臺帳戶(Daemon Account)或其他類似事物。它僅僅意味着“當前跟軟件交互的東西”。Subject代表了當前用戶的安全操作,SecurityManager則管理所有用戶的安全操作。
SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通過SecurityManager來管理內部組件實例,並通過它來提供安全管理的各種服務。
Authorizer:權限驗證器
Authenticator:身份認證器,登錄登出模塊
Realm: Realm充當了Shiro與應用安全數據間的“橋樑”或者“連接器”。也就是說,當對用戶執行認證(登錄)和授權(訪問控制)驗證時,Shiro會從應用配置的Realm中查找用戶及其權限信息。
從這個意義上講,Realm實質上是一個安全相關的DAO:它封裝了數據源的連接細節,並在需要時將相關數據提供給Shiro。當配置Shiro時,你必須至少指定一個Realm,用於認證和(或)授權。配置多個Realm是可以的,但是至少需要一個。
Shiro內置了可以連接大量安全數據源(又名目錄)的Realm,如LDAP、關係數據庫(JDBC)、類似INI的文本配置資源以及屬性文件等。如果缺省的Realm不能滿足需求,你還可以插入代表自定義數據源的自己的Realm實現。
Session Manager:會話管理器
SessionDAO:會話操作接口,在shiro.session.mgt.eis包中,提供了一個抽象類AbstractSessionDAO,和三個實現類CachingSessionDAO(session緩存操作類),MemorySessionDAO(這個應該是使用web的session,未驗證),RedisSessionDAO(集成redis管理會話)
CacheManager:緩存管理器,下面提供了系統默認緩存,應該是使用jvm緩存操作的類,shiro-ehcache包中提供的ehcache緩存操作EhCacheManager和shiro-redis包中提供了RedisCacheManager redis緩存操作的封裝
cryptography : shiro提供了相比於java內置加密更簡便使用的密碼學工具
三、具體化
經過上述的過程,大家估計會對shiro的架構有了一些瞭解,做一個形象的比喻,我們可以把整個shiro看做一臺筆記本電腦,shiro的核心組件看做電腦中的零件,比如可以把CacheManager看做電腦的顯卡,如果開啓一些大型軟件(很多訪問量),時間一長必然會造成散熱降頻卡頓(系統卡頓、死機,佔用大量jvm緩存),這時,我們可以選擇外置顯卡來解決這一問題(引入第三方緩存redis或者EhCache)。高度自由化的配置和默認拿來即用理念,這是我對shiro架構的理解。