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共享

今天我們先來介紹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。

總結
          基礎知識宏觀瞭解,掌握全局!
發佈了249 篇原創文章 · 獲贊 92 · 訪問量 190萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章