Apache Shiro中文文檔(官方翻譯)

Apache Shiro的設計目標是經過直觀且易於使用來簡化應用程序安全性。Shiro的核心設計模擬了大多數人如何在與某人(或某物)進行交互的狀況下如何考慮應用程序安全性。html

軟件應用程序一般是根據用戶案例設計的。也就是說,您一般會根據用戶與軟件的交互方式來設計用戶界面或服務API。例如,您可能會說:「若是與個人應用程序交互的用戶已登陸,我將向他們顯示一個按鈕,使他們能夠單擊以查看其賬戶信息。若是他們沒有登陸,我將顯示一個註冊按鈕。」spring

該示例語句代表,編寫應用程序主要是爲了知足用戶需求。即便「用戶」是另外一個軟件系統而不是人類,您仍然能夠編寫代碼以根據當前正在與您的軟件進行交互的人員(或內容)來反映行爲。數據庫

Shiro在本身的設計中反映了這些概念。經過匹配軟件開發人員已經很直觀的內容,Apache Shiro仍然保持直觀且易於在幾乎任何應用程序中使用。apache

高層概述

在最高概念層次,四郎的建築有3個主要的概念:SubjectSecurityManagerRealms。下圖是這些組件如何交互的高級概述,咱們將在下面介紹每一個概念:編程

  • 主題:正如咱們在剛纔提到教程,在Subject本質上是當前正在執行的用戶的安全特定「視圖」。「用戶」一詞一般表示一我的,一我的Subject能夠是一我的,但它也能夠表示第三方服務,守護程序賬戶,cron做業或相似的東西-基本上是當前與該軟件交互的任何東西。

    Subject實例都綁定到(並要求)SecurityManager。當您與互動時Subject,這些互動會轉化爲與主題相關的互動SecurityManager後端

  • SecurityManagerSecurityManager是Shiro體系結構的核心,並充當一種「傘」對象,該對象協調其內部安全組件,這些安全組件一塊兒造成對象圖。可是,一旦爲應用程序配置了SecurityManager及其內部對象圖,一般就不理會它,而且應用程序開發人員幾乎全部時間都花在SubjectAPI上。

    稍後咱們將SecurityManager詳細討論,可是重要的是要認識到,當您與進行交互時SubjectSecurityManager對於任何Subject安全操做而言,確實是幕後工做。這反映在上面的基本流程圖中。api

  • 領域:領域充當Shiro與應用程序的安全數據之間的「橋樑」或「鏈接器」。當真正須要與安全性相關的數據(例如用戶賬戶)進行交互以執行身份驗證(登陸)和受權(訪問控制)時,Shiro會從一個或多個爲應用程序配置的領域中查找許多此類內容。

    從這個意義上說,領域本質上是特定於安全性的DAO:它封裝了數據源的鏈接詳細信息,並根據須要使關聯數據可用於Shiro。在配置Shiro時,您必須至少指定一個領域用於身份驗證和/或受權。所述SecurityManager可與多個境界被配置,但至少有一個是必需的。緩存

    Shiro提供了開箱即用的領域,能夠鏈接到許多安全數據源(又名目錄),例如LDAP,關係數據庫(JDBC),文本配置源(例如INI和屬性文件)等。若是默認的Realms不能知足您的需求,那麼您能夠插入本身的Realm實現以表示自定義數據源。安全

    像其餘內部組件同樣,ShiroSecurityManager管理着如何使用領域來獲取要表示爲Subject實例的安全性和身份數據。session

詳細架構

下圖顯示了Shiro的核心架構概念,並簡要概述了每一個架構:

  • 主題org.apache.shiro.subject.Subject
    當前與軟件交互的實體(用戶,第三方服務,計劃任務等)的特定於安全性的「視圖」。
  • SecurityManagerorg.apache.shiro.mgt.SecurityManager
    如上所述,這SecurityManager是Shiro體系結構的核心。它主要是一個「傘」對象,用於協調其託管組件以確保它們可以順利協同工做。它還管理Shiro對每一個應用程序用戶的視圖,所以它知道如何對每一個用戶執行安全性操做。
  • 認證器org.apache.shiro.authc.Authenticator
    Authenticator是,負責執行和用戶反應,以驗證(登陸)的嘗試的組件。當用戶嘗試登陸時,該邏輯由執行Authenticator。該Authenticator知道如何與一個或多個協調Realms該商店相關的用戶/賬戶信息。從這些數據中得到的數據Realms用於驗證用戶的身份,以確保用戶確實是他們所說的真實身份。

    • 身份驗證策略org.apache.shiro.authc.pam.AuthenticationStrategy
      若是Realm配置了多個身份驗證策略,則AuthenticationStrategy它將協調領域以肯定肯定嘗試成功或失敗的條件(例如,一個領域成功但其餘領域失敗) ,嘗試是否成功?全部領域都必須成功嗎?只有第一個?)。
  • 認證器org.apache.shiro.authz.Authorizer
    Authorizer是部件負責肯定用戶在該應用程序的訪問控制。它是最終代表是否容許用戶作某事的機制。像同樣AuthenticatorAuthorizer還知道如何與多個後端數據源進行協調以訪問角色和權限信息。在Authorizer使用該信息來準確肯定是否容許用戶執行特定的操做。
  • SessionManagerorg.apache.shiro.session.mgt.SessionManager
    SessionManager知道如何建立和管理用戶Session生命週期,提供在全部環境中的用戶強大的會話體驗。這是安全框架領域中的一項獨特功能-Shiro可以在任何環境中本地管理用戶會話,即便沒有Web / Servlet或EJB容器也能夠。默認狀況下,Shiro將使用現有的會話機制(例如Servlet容器)(若是可用),可是若是沒有這種機制(例如在獨立應用程序或非Web環境中),它將使用其內置的企業會話管理來提供相同的編程經驗。的SessionDAO存在容許任何數據源被用來堅持的會議。

  • CacheManager的org.apache.shiro.cache.CacheManager
    CacheManager建立和管理Cache其餘四郎組件使用實例的生命週期。由於Shiro能夠訪問許多後端數據源以進行身份​​驗證,受權和會話管理,因此緩存一直是框架中的一流架構功能,能夠在使用這些數據源時提升性能。能夠將任何現代的開源和/或企業緩存產品插入Shiro,以提供快速有效的用戶體驗。
  • 密碼術org.apache.shiro.crypto。*
    密碼術是企業安全框架的天然補充。Shiro的crypto軟件包包含易於使用和理解的密碼學密碼,哈希(又名摘要)和不一樣編解碼器實現的表示形式。該軟件包中的全部類都通過精心設計,以使其易於使用和理解。使用Java的本機加密技術支持的任何人都知道,馴服它多是具備挑戰性的動物。Shiro的加密API簡化了複雜的Java機制,並使加密技術易於普通凡人使用。
  • 領域org.apache.shiro.realm.Realm
    如上所述,領域充當Shiro與應用程序的安全數據之間的「橋樑」或「鏈接器」。當真正須要與安全性相關的數據(例如用戶賬戶)進行交互以執行身份驗證(登陸)和受權(訪問控制)時,Shiro會從一個或多個爲應用程序配置的領域中查找許多此類內容。您能夠根據Realms須要配置任意數量(一般每一個數據源一個),而且Shiro會根據須要進行協調,以進行身份​​驗證和受權。

SecurityManager

由於Shiro的API鼓勵採用以中心爲Subject中心的編程方法,因此大多數應用程序開發人員不多(若是有的話)SecurityManager直接與之交互(可是框架開發人員有時可能會以爲有用)。即便這樣,瞭解這些SecurityManager功能的功能仍然很重要,尤爲是在爲應用程序配置功能時。

設計

如前所述,應用程序SecurityManager執行安全操做並管理_全部_應用程序用戶的狀態。在Shiro的默認SecurityManager實現中,這包括:

  • 認證方式
  • 受權書
  • 會話管理
  • 緩存管理
  • 領域協調
  • 事件傳播
  • 「記住我」服務
  • 主題創做
  • 註銷等。

但這是嘗試在單個組件中進行管理的許多功能。並且,若是將全部內容都納入一個實現類中,那麼使這些事情變得靈活和可定製將很是困難。

爲了簡化配置並實現靈活的配置/可插拔性,Shiro的實如今設計上都是高度模塊化的-其實是模塊化的,所以SecurityManager實現(及其類層次結構)根本不起做用。相反,這些SecurityManager實現大多充當輕量級的「容器」組件,幾乎將全部行爲委派給嵌套/包裝的組件。這種「包裝」設計反映在上面的詳細架構圖中。

當組件實際執行邏輯時,SecurityManager實現知道如何以及什麼時候協調組件以實現正確的行爲。

SecurityManager實現方式和組件也兼容的JavaBeans,它容許(或配置機構),以方便地定製可插組件經由標準的JavaBeans存取器/ mutator方法(獲取* /組*)。這意味着Shiro的體系結構模塊化能夠轉化爲很是易於配置的自定義行爲。

簡易配置


因爲JavaBeans的兼容性,經過支持JavaBeans風格的配置的任何機制(例如Spring,Guice,JBoss等),使用自定義組件配置SecurityManager都是很是容易的。

接下來咱們將介紹配置

伸出援手與文件

儘管咱們但願該文檔對您使用Apache Shiro所作的工做有所幫助,但社區一直在不斷改進和擴展文檔。若是您想幫助Shiro項目,請考慮在須要的地方更正,擴展或添加文檔。您提供的每一點幫助都會擴大社區,進而改善Shiro。

貢獻文檔的最簡單方法是經過單擊Edit下面的連接來提交請求請求,而後將其發送到「用戶論壇」或「用戶郵件列表」

相關文章
相關標籤/搜索