日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

非常详尽的 Shiro 架构解析!

發布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 非常详尽的 Shiro 架构解析! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Shiro是什么?


Apache Shiro是一個強大而靈活的開源安全框架,它干凈利落地處理身份認證,授權,企業會話管理和加密。

Apache Shiro的首要目標是易于使用和理解。安全有時候是很復雜的,甚至是痛苦的,但它沒有必要這樣。框架應該盡可能掩蓋復雜的地方,露出一個干凈而直觀的API,來簡化開發人員在使他們的應用程序安全上的努力。

官網:http://shiro.apache.org

?

Shiro有什么用?


以下是你可以用Apache Shiro所做的事情:

  • 驗證用戶來核實他們的身份

  • 對用戶執行訪問控制,如:

  • 判斷用戶是否被分配了一個確定的安全角色;

  • 判斷用戶是否被允許做某事;

    • 在任何環境下使用Session API,即使沒有Web或EJB容器。

    • 在身份驗證,訪問控制期間或在會話的生命周期,對事件作出反應。

    • 聚集一個或多個用戶安全數據的數據源,并作為一個單一的復合用戶“視圖”。

    • 啟用單點登錄(SSO)功能。

    • 為沒有關聯到登錄的用戶啟用"Remember Me"服務

    • 以及更多——全部集成到緊密結合的易于使用的API中。

    Shiro 視圖在所有應用程序環境下實現這些目標——從最簡單的命令行應用程序到最大的企業應用,不強制依賴其他第三方框架,容器,或應用服務器。當然,該項目的目標是盡可能地融入到這些環境,但它能夠在任何環境下立即可用。

    ?

    Shiro特性


    Apache Shiro是一個擁有許多功能的綜合性的程序安全框架。

    Shiro把Shiro開發團隊稱為“應用程序的四大基石”——身份驗證,授權,會話管理和加密作為其目標。

    • Authentication:有時也簡稱為“登錄”,這是一個證明用戶是他們所說的他們是誰的行為。

    • Authorization:訪問控制的過程,也就是絕對“誰”去訪問“什么”。

    • Session Management:管理用戶特定的會話,即使在非 Web 或 EJB 應用程序。

    • Cryptography:通過使用加密算法保持數據安全同時易于使用。

    也提供了額外的功能來支持和加強在不同環境下所關注的方面,尤其是以下這些:

    • Web Support:Shiro的web支持的API能夠輕松地幫助保護 Web 應用程序。

    • Caching:緩存是Apache Shiro中的第一層公民,來確保安全操作快速而又高效。

    • Concurrency:Apache Shiro利用它的并發特性來支持多線程應用程序。

    • Testing:測試支持的存在來幫助你編寫單元測試和集成測試,并確保你的能夠如預期的一樣安全。

    • "Run As":一個允許用戶假設為另一個用戶身份(如果允許)的功能,有時候在管理腳本很有用。

    • "Remember Me":在會話中記住用戶的身份,所以他們只需要在強制時候登錄。

    ?

    Shiro 架構


    Apache Shiro的設計目標是通過直觀和易于使用來簡化應用程序安全。Shiro 的核心設計體現了大多數人們是如何考慮應用程序安全的——在某些人(或某些事)與應用程序交互的背景下。

    應用軟件通常是基于用戶背景情況設計的。也就是說,你將經常設計用戶接口或服務API,基于一個用戶將要(或應該)如何與該軟件交互。例如,你可能會說,“如果用戶與我的應用程序交互的用戶已經登錄,我將顯示一個他們能夠點擊的按鈕來查看他們的帳戶信息。如果他們沒有登錄,我將顯示一個登錄按鈕。”

    這個簡單的陳述表明應用程序很大程度上的編寫是為了滿足用戶的要求和需要。即使該“用戶”是另一個軟件系統而不是一個人類,你仍然得編寫代碼來響應行為,基于當前與你的軟件進行交互的人或物。

    Shiro在它自己的設計中體現了這些概念。通過匹配那些對于軟件開發人員來說已經很直觀的東西,Apache Shiro幾乎在任何應用程序保持了直觀和易用性。

    在最高的概念層次,Shiro的架構有3個主要的概念:Subject,SecurityManager 和 Realms。

    下面的關系圖是關于這些組件是如何交互的高級概述,而且我們將會在下面討論每一個概念:

    ?

    Subject

    在我們的教程中已經提到,Subject實質上是一個當前執行用戶的特定的安全“視圖”。鑒于"User"一詞通常意味著一個人,而一個Subject可以是一個人,但它還可以代表第三方服務,daemon account,cron job,或其他類似的任何東西——基本上是當前正與軟件進行交互的任何東西。

    所有Subject實例都被綁定到(且這是必須的)一個SecurityManager上。當你與一個Subject交互時,那些交互作用轉化為與SecurityManager交互的特定subject的交互作用。

    SecurityManager

    SecurityManager是Shiro架構的心臟,并作為一種“保護傘”對象來協調內部的安全組件共同構成一個對象圖。然而,一旦SecurityManager和它的內置對象圖已經配置給一個應用程序,那么它單獨留下來,且應用程序開發人員幾乎使用他們所有的時間來處理Subject API。

    稍后會更詳細地討論SecurityManager,但重要的是要認識到,當你正與一個Subject進行交互時,實質上是幕后的 SecurityManager處理所有繁重的Subject安全操作。這反映在上面的基本流程圖。

    Realms

    Realms擔當Shiro和你的應用程序的安全數據之間的“橋梁”或“連接器”。當它實際上與安全相關的數據如用來執行身份驗證(登錄)及授權(訪問控制)的用戶帳戶交互時,Shiro 從一個或多個為應用程序配置的Realm中尋找許多這樣的東西。

    在這個意義上說,Realm本質上是一個特定安全的DAO:它封裝了數據源的連接詳細信息,使Shiro所需的相關的數據可用。當配置Shiro時,你必須指定至少一個Realm用來進行身份驗證和/或授權。SecurityManager可能配置多個Realms,但至少有一個是必須的。

    Shiro提供了立即可用的Realms來連接一些安全數據源(即目錄),如LDAP,關系數據庫(JDBC),文本配置源,像 INI 及屬性文件,以及更多。你可以插入你自己的Realm 實現來代表自定義的數據源,如果默認地Realm不符合你的需求。

    像其他內置組件一樣,Shiro SecurityManager控制 Realms是如何被用來獲取安全和身份數據來代表 Subject 實例的。

    下圖展示了Shiro的核心架構概念,緊跟其后的是每個的簡短總結:

    Subject(org.apache.shiro.subject.Subject)

    當前與軟件進行交互的實體(用戶,第三方服務,cron job,等等)的安全特定“視圖”。

    SecurityManager(org.apache.shiro.mgt.SecurityManager)

    如上所述,SecurityManager是Shiro架構的心臟。它基本上是一個“保護傘”對象,協調其管理的組件以確保它們能夠一起順利的工作。它還管理每個應用程序用戶的Shiro 的視圖,因此它知道如何執行每個用戶的安全操作。

    Authenticator(org.apache.shiro.authc.Authenticator)

    Authenticator是一個對執行及對用戶的身份驗證(登錄)嘗試負責的組件。當一個用戶嘗試登錄時,該邏輯被 Authenticator執行。Authenticator知道如何與一個或多個Realm協調來存儲相關的用戶/帳戶信息。從這些Realm中獲得的數據被用來驗證用戶的身份來保證用戶確實是他們所說的他們是誰。

    Authentication Strategy(org.apache.shiro.authc.pam.AuthenticationStrategy)

    如果不止一個Realm被配置,則AuthenticationStrategy將會協調這些Realm來決定身份認證嘗試成功或失敗下的條件(例如,如果一個Realm成功,而其他的均失敗,是否該嘗試成功?是否所有的Realm必須成功?或只有第一個成功即可?)。

    Authorizer(org.apache.shiro.authz.Authorizer)

    Authorizer是負責在應用程序中決定用戶的訪問控制的組件。它是一種最終判定用戶是否被允許做某事的機制。與 Authenticator相似,Authorizer也知道如何協調多個后臺數據源來訪問角色惡化權限信息。Authorizer使用該信息來準確地決定用戶是否被允許執行給定的動作。

    SessionManager(org.apache.shiro.session.SessionManager)

    SessionManager知道如何去創建及管理用戶Session生命周期來為所有環境下的用戶提供一個強健的Session體驗。這在安全框架界是一個獨有的特色——Shiro擁有能夠在任何環境下本地化管理用戶Session的能力,即使沒有可用的Web/Servlet或EJB容器,它將會使用它內置的企業級會話管理來提供同樣的編程體驗。SessionDAO的存在允許任何數據源能夠在持久會話中使用。

    SessionDAO(org.apache.shiro.session.mgt.eis.SessionDAO)

    SesssionDAO代表SessionManager執行Session持久化(CRUD)操作。這允許任何數據存儲被插入到會話管理的基礎之中。

    CacheManager(org.apahce.shiro.cache.CacheManager)

    CacheManager創建并管理其他Shiro組件使用的Cache實例生命周期。因為Shiro能夠訪問許多后臺數據源,由于身份驗證,授權和會話管理,緩存在框架中一直是一流的架構功能,用來在同時使用這些數據源時提高性能。任何現代開源和/或企業的緩存產品能夠被插入到Shiro來提供一個快速及高效的用戶體驗。

    Cryptography(org.apache.shiro.crypto.*)

    Cryptography是對企業安全框架的一個很自然的補充。Shiro的crypto包包含量易于使用和理解的cryptographic Ciphers,Hasher(又名digests)以及不同的編碼器實現的代表。所有在這個包中的類都被精心地設計以易于使用和易于理解。任何使用Java的本地密碼支持的人都知道它可以是一個難以馴服的具有挑戰性的動物。Shiro的cryptoAPI 簡化了復雜的Java機制,并使加密對于普通人也易于使用。

    Realms(org.apache.shiro.realm.Realm)

    如上所述,Realms在Shiro和你的應用程序的安全數據之間擔當“橋梁”或“連接器”。當它實際上與安全相關的數據如用來執行身份驗證(登錄)及授權(訪問控制)的用戶帳戶交互時,Shiro從一個或多個為應用程序配置的Realm中尋找許多這樣的東西。你可以按你的需要配置多個Realm(通常一個數據源一個Realm),且Shiro將為身份驗證和授權對它們進行必要的協調。

    The SecurityManager

    因為Shiro的API鼓勵一個以Subject為中心的編程方式,大多數應用程序開發人員很少,如果真有,與SecurityManager直接進行交互(框架開發人員有時候會覺得它很有用)。即便如此,了解如何SecurityManager是如何工作的仍然是很重要的,尤其是在為應用程序配置一個SecurityManager的時候。

    Design

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

    • Authentication

    • Authorization

    • Session Management

    • Cache Management

    • Realm coordination

    • Event propagation

    • "Remember Me" Services

    • Subject creation

    • Logout

    以及更多。

    但這是許多功能來嘗試管理一個單一的組件。而且,使這些東西靈活而又可定制將會是非常困難的,如果一切都集中到一個單一的實現類。

    為了簡化配置并啟用靈活配置/可插性,Shiro的實現都是高度模塊化設計——由于如此的模塊化,SecurityManager實現(以及它的類層次結構)并沒有做很多事情。相反,SecurityManager 實現主要是作為一個輕量級的“容器”組件,委托計劃所有的行為到嵌套/包裹的組件。這種“包裝”的設計體現在上面的詳細構架圖。

    雖然組件實際上執行邏輯,但SecurityManager實現知道何時以及如何協調組件來完成正確的行為。SecurityManager 實現和組件都是兼容JavaBean的,它允許你(或某個配置機制)通過標準的JavaBean的accessor/mutator 方法(get/set)輕松地自定義可拔插組件。這意味著 Shiro 的架構的組件性能夠把自定義行為轉化為非常容易的配置文件。

    Easy Configuration

    由于JavaBeans的兼容性,通過任何支持JavaBean風格的配置的機制可以很容易的用自定義組件配置SecurityManager,如 Spring,Guice,JBoss,等等。

    總結

    以上是生活随笔為你收集整理的非常详尽的 Shiro 架构解析!的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。