1. 程式人生 > >Apache shiro叢集實現 (一) shiro入門介紹

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

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

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

一、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。 


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

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

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

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。 總結           基礎知識巨集觀瞭解,掌握全域性!