Apache Shiro框架解析

2022-10-12 03:30:06 字數 3582 閱讀 9726

apache shiro設計理念是用直觀、簡單的方式來保證應用的安全。

軟體設計通常是基於使用者故事來實現的,也就是會根據使用者如何與系統互動來設計使用者介面或者服務api。比如這樣乙個使用者故事,使用者登入後會顯示乙個檢視個人賬戶資訊的按鈕,如果使用者未註冊,則顯示乙個註冊按鈕。

這個使用者故事暗含了應用主要應完成的使用者需求。即使這裡的使用者不是人而是第三方系統,在編碼時也同樣當做與系統互動的「使用者」來處理。

apache shiro的這種理念反應在自己的設計中,通過將直觀的概念暴露給開發人員,使得apache shiro在幾乎所有的應用中都易於使用。

概述shiro有三個主要的頂級概念:subject、securitymanager、realms。下圖描述了這幾個概念之間的互動,下面也將一一做介紹。

subject:subject是當前使用者在安全領域的乙個縮影。user通常暗含人的意思,而subject可以是人,可以是第三方服務,守護賬戶,corn作業。

或者說是任何與系統互動的都可以叫做subject。

所有的subject例項都必須繫結到乙個securitymanager,這樣當與subject互動時,其實已經轉化成與這個subject相關聯的securitymanager進行互動。

securitymanager:securitymanager作為shiro框架的核心,作為「保護傘」物件的形式存在,它協調其內部安全元件形成乙個物件圖。當在應用中完成securitymanager和其內部物件的配置後,securitymanager就退居二線,開發人員大部分時間都是在使用subject的api。

隨後會深入講解securitymanager,再次強調:當與subject互動時,實際上是隱藏其背後的securitymanager負責subject繁重的安全操作。這點在上面的圖中也有所體現。

realms:realms作為shiro和應用中安全資料來源之間的橋梁或者聯結器。當需要獲取使用者賬戶進行認證(登陸)或授權(訪問控制)時,shiro就會在應用的配置中查詢負責這項工作的realm(乙個或多個)來完成獲取安全資料。

從這點上講,realm實質上就是乙個與安全相關的dao:它封裝了資料來源鏈結的詳情,並根據shiro的需要為其提供資料。配置shiro時,要為認證和授權至少提供乙個reaml。

可配置多個realm,但是至少需要乙個。

shiro內建了可以連線大量安全資料來源的realm,如ldap、關聯式資料庫(jdbc)、類似ini的文字配置資源以及屬性檔案等。如果內建的realm不能滿足需求,你還可以使用代表自定義資料來源的自己的realm實現。

和其他內部元件一樣,securitymanager管理realm如何獲取與subject相關的安全和身份資訊。

框架詳解

下圖展現了shiro框架的核心概念,隨後會一一對其作出簡短說明:

subject( )

安全領域中使用者的縮影,可以是人,第三方服務,corn作業等,負責與系統互動。

securitymanager(

就像上文提到的,securitymanager是shiro框架的核心。它充當「保護傘」物件的作用,內部協調各個元件,以確保它們順利開展工作,而且還負責管理subject,這樣它也就獲悉了每個subject怎麼執行安全操作了。

authenticator(

authenticator負責發出和處理使用者的認證請求。當使用者登入時,authenticator負責處理登入邏輯。authenticator可通過乙個或多個realm獲取使用者資訊,這些資訊用來驗證當前使用者身份。

驗證策略(

如果配置了多個realm,。(比如,乙個realm認證成功,其他失敗,那認證是否通過呢?)

authorizer (

authorizer負責應用中使用者的訪問控制。它是決定使用者是否可以在應用中進行某件事的機制。和authenticator一樣,authorizer可以通過realm獲取角色和許可權資訊,這樣authorizer就可以確切的知道是否允許使用者完成其預期的操作。

sessionmanager (

sessionmanager用來建立和管理使用者session的生命週期,在任何應用環境下,都可以為使用者提供穩定的session。shiro可以在任何應用環境下管理使用者session,不需要依附於web/servlet或者ejb容器,這個特性在安全框架領域是唯一的。比如在servlet容器環境下,預設使用容器自帶的session,如果像在獨立應用或非web容器環境下,根本就沒有session的存在,那麼shiro使用其內建的企業會話管理器提供同樣的程式設計體驗。

sessiondao的存在使得任何資料來源都可以用來持久session。

sessiondao (

sessiondao為securitymanager提供會話持久(crud)功能,這樣就可讓任何資料來源參與到會話管理基礎設施中來。

cachemanager (

cachemanager為shiro的其他元件提供建立快取例項和管理快取生命週期的功能。因為shiro的認證、授權、會話管理支援多種資料來源,所以訪問資料來源時,使用快取來提高訪問效率是上乘的選擇。當下主流開源或企業級快取框架都可以繼承到shiro中,來獲取更快更高效的使用者體驗。

cryptography (

cryptography是企業級安全框架基本特徵。shiro的加密包中,包含了易於使用和理解的密碼加密,雜湊和其他不同加密演算法的實現。加密包下面的所有類都是經過精心設計的,來達到易於使用和理解的目的,之前使用過j**a自帶的加密api的會了解到,它是很難使用的。

shiro的加密api簡化了j**a複雜的加密機制,而且很容易使用。

realms(

上文中也提到過,realms作為shiro和應用中安全資料來源之間的橋梁或者聯結器。當需要獲取使用者賬戶進行認證(登陸)或授權(訪問控制)時,shiro就會在應用的配置中查詢負責這項工作的realm(乙個或多個)來完成獲取安全資料。可以配置多個realm,大多情況是乙個資料來源乙個realm,shiro會負責為認證和授權協調多個realm一同工作。

securitymanager簡介

由於shiro採用以subject為中心的程式設計方式,所以幾乎很少有機會直接與securitymanager打交道(但與securitymanager打交道對框架開發人員很重要),儘管如此,了解securitymanager的作用也還是很重要的,為應用配置securitymanager的時候尤為重要。

設計如上文所述,securitymanager負責處理應用中的安全操作,管理所有應用使用者的狀態。shiro中securitymanager的預設實現包括如下:

authentication

authorization

session management

cache management

realm coordination

event propagation

"remember me" services

subject creation

logout

等等。但是讓乙個元件完成這麼多功能,而且做到靈活可定製是非常困難的。為了簡化配置和使配置更靈活,shiro的各種實現採用了高度的模組化。

模組化之後,securitymanager實際上就作為乙個輕量級「容器」,幾乎所有的功能都委託給內部或包裝元件實現。這種包裝的設計方法在詳細的框架圖中也有所體現。

這些元件才是真正的功能實現者,securitymanager知道如何以及何時協調這些元件做正確的事情即可。

iScroll框架解析

概要iscroll4這個版本完全重寫了iscroll這個框架的原始 這個專案的產生完全是因為移動版webkit瀏覽器 諸如iphone,ipad,android這些系統上廣泛使用 提供了一種本地化的方式來對乙個限定了高度和寬度的元素的內容進行滑動。很不幸的是,這種情況下所有的web應用的頁面就不能夠...

智慧型製造應用框架解析

從智慧型製造的共性特點出發,結合 物聯網 與應用平台等技術,給出智慧型製造的應用框架,如圖1所示。該框架包括四層 it ot資源層 it ot互聯層 app平台層 app層。智慧型製造應用框架對企業傳統應用體系的轉型公升級,其以cps hub為基礎 app平台為核心 app為業務支撐。it ot資源...

框架監理規劃 框架正確

霍邱縣邵崗鄉灃河小學教學樓工程 監 理 規 劃 編制 審批 安徽省建信工程監理諮詢 二o一五年八月一日 1 工程概況 1.1工程名稱 霍邱縣邵崗鄉灃河小學教學樓工程 1.2工程地點 邵崗鄉 1.3建築面積 743.13 1.4結構型別 層數 框架 三層 1.5設計單位 安徽電子工業設計院 1.6勘察...