Apache Shiro是一個強大且易用的Java安全架構,執行身份驗證、授權、加密和會話管理。
三個核心元件:Subject, SecurityManager 和 Realms.
Subject:即“目前操作使用者”。但是,在Shiro中,Subject這一概念并不僅僅指人,也可以是第三方程序、背景帳戶(Daemon Account)或其他類似事物。它僅僅意味着“目前跟軟體互動的東西”。
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(加密)被 Shiro 架構的開發團隊稱之為應用安全的四大基石。那麼就讓我們來看看它們吧:- Authentication(認證):使用者身份識别,通常被稱為使用者“登入”
- Authorization(授權):通路控制。比如某個使用者是否具有某個操作的使用權限。
- Session Management(會話管理):特定于使用者的會話管理,甚至在非web 或 EJB 應用程式。
- Cryptography(加密):在對資料源使用加密算法加密的同時,保證易于使用。
還有其他的功能來支援和加強這些不同應用環境下安全領域的關注點。特别是對以下的功能支援:
- Web支援:Shiro的Web支援API有助于保護Web應用程式。
- 緩存:緩存是Apache Shiro API中的第一級,以確定安全操作保持快速和高效。
- 并發性:Apache Shiro支援具有并發功能的多線程應用程式。
- 測試:存在測試支援,可幫助您編寫單元測試和內建測試,并確定代碼按預期得到保障。
- “運作方式”:允許使用者承擔另一個使用者的身份(如果允許)的功能,有時在管理方案中很有用。
- “記住我”:記住使用者在會話中的身份,是以使用者隻需要強制登入即可。