Java-Shiro(一):簡介


簡介

Apache Shiro是Java的一個安全權限框架。

Shiro可以非常容易的開發出足夠好的額應用,其不僅可以用在JavaSE環境,也可以用在Java SE環境。

Shiro可以完成:認證、授權、加密、會話管理、與Web集成、緩存等。

Shiro的下載地址:http://shiro.apache.org

功能簡介

  • Authentication:身份認賬、登錄,驗證用戶是不是擁有相應的身份;
  • Authorization:授權,即權限驗證,驗證某個已經認證的用戶是否擁有某個權限;即判斷用戶是有能進行什么操作。比如:驗證某個用戶是否擁有某個角色,或者細粒度的驗證某個用戶對某個資源是否具有某個權限;
  • Session Manager:會話管理,用戶登錄后就是一次會話,在用戶未退出之前,他的所有信息都在會話中。會話可以是普通的JavaSE環境,也可以是Web環境的;
  • Cryptography:加密,保護數據的安全性,比如密碼加密存儲到數據庫,而不是明文存儲;
  • Web Support:web支持,可以非常容易的集成到web環境;
  • Caching:緩存,比如用戶登錄后,其用戶信息、擁有的角色/權限不必每次去查詢,這樣可以提高效率;
  • Concurrency:shiro支持多線程應用的開發驗證,即如在一個線程中開啟另一個線程,能把權限自動傳播過去;
  • Testing:提供測試支持;
  • Run As:允許一個用戶偽裝為另外一個用戶(如果他們允許)的身份進行訪問;
  • Remember Me:記住我,這個是非常常見的功能,即一次登陸后,下次再來的話不用登錄了。

Shiro架構

從外部來看Shiro,即從應用程序角度來觀察如何使用shiro完成工作:

  • Subject:應用代碼直接交互的對象是Subject,也就是說Shiro的對外API核心就是Subject。Subject代表了當前"用戶",這個用戶不一定就是一個具體的人,與當前應用交互的任何東西都是Subject,如網絡爬蟲,機器人等;與Subject的所有交互都委托給SecurityManager;Subject其實是一個門面,SecurityManager才是實際的執行者;
  • SecurityManager:安全管理器,即所有與安全有關的操作都會與SecurityManager交互;且其管理所有Subject;可以看出它是Shiro的核心,它負責與Shiro的其他組件進行交互,它相當於SpringMVC中DispatcherServlet的角色。
  • Realm:Shiro從Realm獲取安全數據(如用戶、角色、權限),就是說SecurityManager需驗證用戶身份,那么它需要從Realm獲取響應的用戶進行比較以確定用戶身份是否合法;也需要從Realm得到用戶相應的角色、權限進行驗證用戶是否能進行操作;可以把Realm看成DataSource。

 

 從外部看Shiro

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM