天天看點

Apache shiro叢集實作 (一) shiro入門介紹

      近期在ITOO項目中研究使用Apache shiro叢集中要解決的兩個問題,一個是Session的共享問題,一個是授權資訊的cache共享問題,官網上給的例子是Ehcache的實作,在配置說明上不算很詳細,我在我們的項目中使用的是nosql(Redis)替代了ehcache做了session和cache的存儲,接下來從shiro、Cas、redis、session等等基礎知識、基本原理內建的角度來不斷的深入分析,系列文章篇幅很長,很豐富,盡請期待!

Apache shiro叢集實作 (一) shiro入門介紹

Apache shiro叢集實作 (二) shiro 的INI配置

Apache shiro叢集實作 (三)shiro身份認證(Shiro Authentication)

Apache shiro叢集實作 (四)shiro授權(Authentication)--通路控制

Apache shiro叢集實作 (五)分布式叢集系統下的高可用session解決方案

Apache shiro叢集實作 (六)分布式叢集系統下的高可用session解決方案---Session共享

Apache shiro叢集實作 (七)分布式叢集系統下---cache共享

Apache shiro叢集實作 (八) web叢集時session同步的3種方法

今天我們先來介紹shiro的基本概念

一、shiro功能介紹

Apache shiro叢集實作 (一) shiro入門介紹
  1. Authentication:身份認證/登入
  2. Authorization:驗證權限,即,驗證某個人是否有做某件事的權限。
  3. Session Management:會話管理。管理使用者特定的會話,支援web,非web,ejb。
  4. Cryptography: 加密,保證資料安全。
  5. 其他特性。
  • Web Support:web支援,更容易繼承web應用。
  • Caching:緩存
  • Concurrency :多線程應用的并發驗證,即如在一個線程中開啟另一個線程,能把權限自動傳播過去;
  • Testing:提供測試支援。
  • Run As:允許一個使用者假裝為另一個使用者(如果他們允許)的身份進行通路;
  • Remember Me:記住我,即記住登入狀态,一次登入後,下次再來的話不用登入了 。

二、架構介紹

從最頂層看shiro,有三個最基本概念 : Subject, SecurityManager 和Realms。 

Apache shiro叢集實作 (一) shiro入門介紹

Subject:主體。抽象概念,代表了目前“使用者”,這個使用者不一定是一個具體的人,與目前應用互動的任何東西都是Subject,如網絡爬蟲,機器人等。

SecurityManager:安全管理器。shiro的核心, 所有與安全有關的操作都會與SecurityManager互動;且它管理着所有Subject。

Realms: shiro和應用程式的權限資料之間的橋梁,為shiro提供安全資料。 SecurityManager要驗證使用者身份,那麼它需要從Realm擷取相應的使用者進行比較以确定使用者身份是否合法;也需要從Realm得到使用者相應的角色/權限進行驗證使用者是否能進行操作;可以把Realm看成DataSource,即安全資料源。

Shiro的架構,如下圖所示:

Apache shiro叢集實作 (一) shiro入門介紹

Subject (org.apache.shiro.subject.Subject)      與應用互動的主體,例如使用者,第三方應用等。 SecurityManager (org.apache.shiro.mgt.SecurityManager)     SecurityManager是shiro的核心,負責整合所有的元件,使他們能夠友善快捷完成某項功能。例如:身份驗證,權限驗證等。 Authenticator (org.apache.shiro.authc.Authenticator)      認證器,負責主體認證的,這是一個擴充點,如果使用者覺得Shiro預設的不好,可以自定義實作;其需要認證政策(Authentication Strategy),即什麼情況下算使用者認證通過了。 Authorizer (org.apache.shiro.authz.Authorizer)       來決定主體是否有權限進行相應的操作;即控制着使用者能通路應用中的哪些功能。 SessionManager (org.apache.shiro.session.mgt.SessionManager)       會話管理。 SessionDAO (org.apache.shiro.session.mgt.eis.SessionDAO)    資料通路對象,對session進行CRUD。 CacheManager (org.apache.shiro.cache.CacheManager)      緩存管理器。建立和管理緩存,為 authentication, authorization 和 session management 提供緩存資料,避免直接通路資料庫,提高效率。 Cryptography (org.apache.shiro.crypto.*)      密碼子產品,提供加密元件。 Realms (org.apache.shiro.realm.Realm)       可以有1個或多個Realm,可以認為是安全實體資料源,即用于擷取安全實體的;可以是JDBC實作,也可以是LDAP實作,或者記憶體實作等等;由使用者提 供;注意:Shiro不知道你的使用者/權限存儲在哪及以何種格式存儲;是以我們一般在應用中都需要實作自己的Realm。

總結           基礎知識宏觀了解,掌握全局!

繼續閱讀