您好,登錄后才能下訂單哦!
一:Shiro簡介
Apache Shiro是Java的一個安全框架。
Shiro 比Spring Security更簡單輕量。
Shiro 可以實現認證、授權、加密、會話管理、與Web集成、緩存等
Shiro不僅可以用在JavaSE環境,也可以用在JavaEE環境
Authentication :身份認證/登錄,驗證用戶是不是擁有相應的身份;
Authorization :授權,即權限驗證,驗證某個已認證的用戶是否擁有某個權限;
Session Manager :會話管理,即用戶登錄后就是一次會話,在沒有退出之前,它的所有信息都在會話中;會話可以是普通JavaSE環境的, 也可以是J2EE環境的,如Web環境;
Cryptography :加密,保護數據的安全性,如密碼加密存儲到數據庫,而不是明文存儲;
Web Support :Web支持,可以非常容易的集成到Web環境;
Caching:緩存,比如用戶登錄后,其用戶信息、擁有的角色/權限不必每次去查,這樣可以提高效率;
Concurrency :Shiro支持多線程應用的并發驗證,即如在一個線程中開啟另一個線程,能把權限自動傳播過去;
Testing :提供測試支持;
Run As :允許一個用戶假裝為另一個用戶(如果他們允許)的身份進行訪問;
Remember Me :記住我,這個是非常常見的功能,即一次登錄后,下次再訪問的話不用重新登錄。
二:Shiro架構
Subject :主體,可以看到主體可以是任何可以與應用交互的“用戶”;
SecurityManager :相當于SpringMVC中的DispatcherServlet或者Struts2中的FilterDispatcher;是Shiro的心臟;所有具體的交互都通過SecurityManager進行控制;它管理著所有Subject、且負責進行認證和授權、及會話、緩存的管理。
Authenticator :認證器,負責主體認證的,這是一個擴展點,如果用戶覺得Shiro默認的不好,可以自定義實現
Authrizer :授權器,或者訪問控制器,用來決定主體是否有權限進行相應的操作;即控制著用戶能訪問應用中的哪些功能;
Realm :可以有1個或多個Realm,可以認為是安全實體數據源,即用于獲取安全實體的;可以是JDBC實現,也可以是LDAP實現,或者內存實現等等,一般應用中都需要實現自己的Realm
SessionManager : 不需要通過Servlet容器既可以實現Session管理,可以用于 JavaSE和 JavaEE環境。
SessionDAO : Session存儲,可以使用數據庫或者緩存。
CacheManager : 緩存控制器,來管理如用戶、角色、權限等的緩存的
Cryptography : 密碼模塊,Shiro提高了一些常見的加密組件用于如密碼加密/解密的。
三:Shiro核心組件
1. Subject: 主體,代表了當前“用戶”,與當前應用交互的任何東西都是Subject,如網格爬蟲,機器人等,是一個抽象的概念;所有Subject都綁定到SecurityManager,與Subject的所有交互都會委托給SecurityManager. 可以把Subject認為是一個門面,SecurityManager才是實際的執行者。
2.SecurityManager: 安全管理器,所有與安全相關的操作都會與SecurityManager交互;它管理著所有Subject;是Shiro的核心。類似于SpringMVC中的DispatcherServlet。
3.Realm: 域,Shiro從Realm獲取安全數據(如用戶,角色,權限),SecurityManager要驗證用戶身份,需要從Realm獲取相應的用戶進行比較以確定用戶身份是否合法;也需要從Realm得到用戶相應的角色/權限進行驗證用戶是否能進行操作,可以把Realm看成DataSource,即安全數據源。
四:Shiro認證和授權的基本流程
1、首先調用 Subject.login(token)進行登錄,其會自動委托給 Security Manager,調用之前必須通過 SecurityUtils. setSecurityManager()設置;
2、 SecurityManager負責真正的身份驗證邏輯;它會委托給 Authenticator進行身份驗證;
3、 Authenticator才是真正的身份驗證者, Shiro API中核心的身份認證入口點,此處可以自定義插入自己的實現;
4、 Authenticator可能會委托給相應的 AuthenticationStrategy進行多 Realm身份驗證,默認 ModularRealmAuthenticator會調用 AuthenticationStrategy進行多 Realm身份驗證;
5、 Authenticator會把相應的 token傳入 Realm,從 Realm獲取身份驗證信息,如果沒有返回 /拋出異常表示身份驗證失敗了。此處可以配置多個 Realm,將按照相應的順序及策略進行訪問。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。