Shiro學習筆記(一)認識Shiro

在之前工作中開發的項目都使用了Shiro,但我基本沒負責過Shiro相關的權限控制模塊,所以對Shiro基本不懂,於是打算在自己做的一個個人小項目中加入Shiro,一是項目本身也需要,二是也想通過這樣來學習和了解Shiro。

 


以下內容全部來源於Shiro官網

什麼是Shiro?

Apache Shiro是一個功能強大、易於使用的Java安全框架,它執行身份驗證、授權、加密和會話管理。使用Shiro提供的易於理解的API,您可以快速且容易地保護任何應用程序——從最小的移動應用程序到最大的web和企業應用程序。

這句話是官網對Shiro最簡單的說明,而往下看就能看到,官網劃分了六個部分來對Shiro的各種功能進行簡要介紹。

Authentication

身份驗證,對使用系統的用戶進行身份驗證,因此用戶也需要向系統供能被識別的證明信息。常見的就是登陸功能,而用戶需要提供用戶名和密碼來進行校驗。

 

Authorization

權限授予,也常叫做訪問控制,是系統對用戶訪問系統資源權限確認的一個過程,換句話說,就是驗證用戶是否有權限訪問系統的菜單、網頁、按鈕或各種各樣的系統資源的過程。

 

Cryptography

證書,比較片面的理解就是Shiro提供的一種加密模塊,它的主要功能就是將用戶的主要信息進行加密或隱藏,從而避免被不希望的對象訪問到。而Shiro重點在兩方面,也是密碼學中的兩個核心方式:使用公鑰或私鑰加密電子郵件之類的數據,以及不可逆地加密密碼等數據的散列。

 

Session Management

會話管理,一般的,會話存在於Web項目這類環境中,而Shiro也提供了會話方面的一些特性功能。會話對於用戶來說,就像是有攜帶時間上限的數據桶,在Web項目中是必不可少的。

 

Web Integration

Web集成,儘管Apache Shiro被設計用於保護任何基於JVM的應用程序,但它最常用於保護Web應用程序。它極大地簡化了如何基於簡單的URL模式匹配和過濾器鏈定義來保護Web應用程序。除了Shiro的API之外,Shiro的網絡支持還包括一個豐富的JSP標記庫來控制頁面輸出。

 

Integrations

更多集成。

 


Shiro的主要結構

Shiro的主要特徵結構圖如下:

從圖可只,Shiro框架重點需要關注的部分,就是上面介紹到的Authentication、Authorization、Session Management和Cryptography,下部分的Web Support、Caching等就是在不同的應用環境中,附加的特徵來支持和加強這些關注作爲上面四個主要部分的支撐。

  • Web Support:Shiro的Web支持API幫助輕鬆地保護Web應用程序。
  • Caching:緩存是Apache Shiro的API中的第一層公民,以確保安全操作保持快速和高效。
  • Concurrency:Apache Shiro支持具有併發特性的多線程應用程序。
  • Testing:測試支持用於幫助您編寫單元和集成測試,並確保您的代碼將如預期的那樣安全。
  • "Run As":允許用戶假設另一個用戶的身份(如果允許的話)的功能,有時在管理場景中是有用的。
  • Remember Me:記住用戶在會話中的身份,這樣他們只需要在強制時登錄。

 

在最高的概念級別上,Shiro的架構有3個主要概念:Subject、SecurityManager和Realms。下圖是對這些組件如何交互的高級概述,我們將在下面介紹每個概念:

  • Subject:

Subject只是一個很花哨的安全術語,基本上是指應用程序用戶的特定於安全的“視圖”。但Subject並不總是指“人”,它其實可以是一個守護進程系統帳戶,該帳戶在一段時間內間歇地執行某些操作(比如cron作業)。而它在程序中而言,不過是向“用戶”提供了一個接口,具體的操作它將交由SecurityManager來進行。

  • SecurityManager:

SecurityManager是Shiro體系結構的核心,用於協調其內部安全組件,這些組件一起形成對象圖。然而,一旦爲應用程序配置了SecurityManager及其內部對象圖,它通常就不管了,應用程序開發人員幾乎把所有的時間都花在Subject API上。而從上圖看來,它起到了一個承上啓下的作用,它對Subject的操作進行交互,而Realm又爲它提供數據支撐。

  • Realms:

Realm類似於Shiro安全系統和數據庫的一個橋樑,當需要與諸如用戶帳戶之類的與安全相關的數據實際交互以執行身份驗證(登錄)和授權(訪問控制)時,Shiro從爲應用程序配置的一個或多個Realms中查找其中許多內容。 Realm本質上是一個特定於安全性的DAO:它封裝了數據源的連接細節,並根據需要使相關的數據對Shiro可用。在配置Shiro時,必須指定至少一個Realm用於身份驗證和/或授權。SecurityManager可以配置多個Realm,但至少要配置一個。

 


Shiro的詳細結構

Shiro的核心架構概念
Shiro的核心架構概念

圖中最上部分就是各種各樣的Subject,它們可以是各種各樣的程序應用的操作,它們的操作會遞交到Security Manager來具體執行,而在重點部分的Authentication、Authorization、Session Management和Cache Manager等這些都由Security Manager來管理,當需要查詢數據時,Realm就會被Security Manager調用來和最底層中各種數據存儲器進行交互。下面補充一些詳細的上面未提過的模塊功能。

身份驗證器,是負責執行用戶身份驗證(登錄)嘗試並對其作出反應的組件。當用戶嘗試登錄時,該邏輯由認證器執行。身份驗證器知道如何與存儲相關用戶/帳戶信息的一個或多個域進行協調。

認證策略,它屬於Authenticator(身份驗證器)中的子模塊,主要作用就是在多個Realm配置的情況下,協調Realms以確定身份驗證嘗試成功或失敗的條件。

授權程序,負責在應用程序中確定用戶訪問控制的組件。與Authenticator一樣,Authorizer也知道如何與多個後端數據源協調以訪問角色和權限信息。Authorizer使用此信息來確定是否允許用戶執行給定操作。

SessionDAO屬於會話管理器,它能爲會話管理器提供持久性操作。

緩存管理器,創建並管理其他Shiro組件使用的緩存實例生命週期。因爲Shiro可以訪問許多後端數據源以進行身份驗證、授權和會話管理,所以緩存一直是框架中一流的體系結構特性,以便在使用這些數據源時提高性能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章