簡介
- Shiro 是java 的一個安全權(quán)限框架。
- Shiro 可以非常容易的開發(fā)出足夠好的應(yīng)用,其不僅可以用在JavaSE環(huán)境上,也可以用在JavaEE環(huán)境
- Shiro 可以完成 :認證、授權(quán)、加密、會話管理、與Web集成、緩存等。
功能簡介

- Authentication :
身份認證/登陸,驗證用戶是不是有相應(yīng)的身份; - Authorization :
授權(quán),及權(quán)限驗證,驗證某個已認證的用戶是否擁有某個權(quán)限;及判斷用戶是否能進行什么操作,如:驗證某個用戶是否擁有某個角色?;蛘呒毩6鹊尿炞C某個用戶對某個資源是否具有某個權(quán)限; - Session Manager :
會話管理,即用戶登錄后就是一次會話,在沒有退出之前,他的所有信息都在會話中;會話可以是普通JavaSE環(huán)境,也可以是Web環(huán)境的; - Cryptography :
加密,保護數(shù)據(jù)的安全性,如密碼加密儲存到數(shù)據(jù)庫,而不是明文儲存; - Caching :
緩存,比如用戶登錄后,其用戶信息、擁有的角色/權(quán)限不必每次去查詢,這樣可以提高效率; - Concurrency :
Shiro 支持多線程應(yīng)用的并發(fā)驗證,即如在一個線程中開啟另一個線程,能把權(quán)限自動傳播過去; - Testing :
提供一個測試支持; - Run As :
**允許一個用戶假裝為另一個用戶(如果他們允許)的身份進行訪問 - Remember Me :
記住我,這個是一個非常常見的功能,即一次登錄后,下次再來的話不用登錄了
從外部來看Shiro
-
從外部來看Shiro,即從應(yīng)用程序角度來觀察如何使用Shiro完成工作
- Subject :
應(yīng)用代碼直接交互的對象是Subject,也就是說Shiro的對外API核心就是Subject。Subject代表了當前“用戶”,這個用戶不一定是一個具體的人,與當前應(yīng)用交互的任何東西都是Subject,如網(wǎng)絡(luò)爬蟲,機器人等;與Subject的所有交互都委托給SecurityManager;Subject其實是一個門面,SecurityManager才是實際的執(zhí)行者; - SecurityManager :
安全管理器;即所有與安全有關(guān)的操作都會與SecurityManager交互;且其管理著所有的Subject;可以看出它是Shiro的核心,它負責(zé)Shiro的其他組件進行交互,他相當于SpringMVC中DispatcherServlet的角色; - Realm :
Shiro從Realm獲取安全數(shù)據(jù)(如用戶、角色、權(quán)限),就是說SecurityManager要驗證用戶身份,那么它需要從Realm獲取相應(yīng)的用戶進行比較以確定用戶身份是否合法;也要從Realm獲取相應(yīng)的角色/權(quán)限進行驗證用戶是否能進行操作;可以吧Real看成DataSource
Shiro 內(nèi)部來看

- Subject:
任何可以與應(yīng)用交互的“用戶”; - SecurityManager:
相當于SpringMVC中的DispatcherServlet;是Shiro的心臟;所有具體的交互都通過SecurityManager進行控制;它管理著所有Subject、且負責(zé)進行認證、授權(quán)、會話及緩存的管理。 - Authenticator:
負責(zé)Subject 認證,是一個擴展點,可以自定義實現(xiàn);可以使用認證策略(Authentication Strategy),即什么情況下算用戶認證通過了; - Authorizer:
授權(quán)器、即訪問控制器,用來決定主體是否有權(quán)限進行相應(yīng)的操作;即控制著用戶能訪問應(yīng)用中的哪些功能; - Realm:
可以有1 個或多個Realm,可以認為是安全實體數(shù)據(jù)源,即用于獲取安全實體的;可以是JDBC 實現(xiàn),也可以是內(nèi)存實現(xiàn)等等;由用戶提供;所以一般在應(yīng)用中都需要實現(xiàn)自己的Realm; - SessionManager:
管理Session 生命周期的組件;而Shiro并不僅僅可以用在Web 環(huán)境,也可以用在如普通的JavaSE環(huán)境 - CacheManager:
緩存控制器,來管理如用戶、角色、權(quán)限等的緩存的;因為這些數(shù)據(jù)基本上很少改變,放到緩存中后可以提高訪問的性能 - Cryptography:
密碼模塊,Shiro提高了一些常見的加密組件用于如密碼加密/解密。
