Apache Shiro的运行流程和权限控制方式分析
Apache Shiro的運(yùn)行流程和權(quán)限控制方式分析
Shiro的架構(gòu)有3個(gè)主要的概念:
Subject
SecurityManager
Realms
下面的關(guān)系圖是關(guān)于這些組件是如何交互的高級(jí)概述。
我們接下來(lái)討論下每一個(gè)概念。
Subjects:Subject實(shí)質(zhì)上是一個(gè)當(dāng)前執(zhí)行用戶的特定的安全“視圖”。鑒于”User”一詞通常意味著一個(gè)人,而一個(gè)Subject可以是一個(gè)人,也可以代表第三方服務(wù),或者其他類似的任何東西–基本上是當(dāng)前正在與軟件進(jìn)行交互的任何東西。所有Subject實(shí)例都被綁定到一個(gè)SecurityManager上,當(dāng)你與一個(gè)Subject交互時(shí),那些交互作用轉(zhuǎn)化為與SecurityManager交互的特定subject的交互作用。
SecurityManager:SucerityManager是Shiro架構(gòu)的心臟,并作為一種“保護(hù)傘”對(duì)象來(lái)協(xié)調(diào)內(nèi)部的安全組件共同構(gòu)成一個(gè)對(duì)象圖。然而,一旦SecurityManager和它的內(nèi)置對(duì)象圖已經(jīng)配置給一個(gè)應(yīng)用程序,那么它單獨(dú)留下來(lái),且應(yīng)用程序開(kāi)發(fā)人員幾乎使用他們所有的時(shí)間來(lái)處理Subject API.當(dāng)你真該與一個(gè)Subject進(jìn)行交互時(shí),實(shí)質(zhì)上是幕后的SecurityManager處理著所有 繁重的Subject安全操作。
Realms:Realms擔(dān)當(dāng)Shiro和你的應(yīng)用程序的安全數(shù)據(jù)之間的“橋梁”或“連接器”。當(dāng)它實(shí)際上與安全相關(guān)的數(shù)據(jù),如用來(lái)執(zhí)行身份驗(yàn)證(登錄)及授權(quán)(訪問(wèn)控制)的用戶賬戶交互時(shí),Shiro從一個(gè)或多個(gè)為應(yīng)用程序配置的Realm中尋找許多這樣的東西。在這個(gè)意義上說(shuō),Realm本質(zhì)上是一個(gè)特定安全的DAO:它封裝了數(shù)據(jù)源的連接詳細(xì)信息,使Shiro所需的相關(guān)的數(shù)據(jù)可用。當(dāng)配置Shiro時(shí),你必須指定至少一個(gè)Realm用來(lái)進(jìn)行身份驗(yàn)證或授權(quán)。SecurityManager可以配置多個(gè)Realms,但至少有一個(gè)是必須的。
Application Code:也就是用戶編寫(xiě)的代碼。
用簡(jiǎn)明扼要的話總結(jié)一下:
Subject就是Shiro管理的用戶;SecurityManager是安全管理器,是Shiro權(quán)限控制核心對(duì)象,在編程時(shí),只需要操作Subject方法,底層會(huì)調(diào)用SecurityManager方法,無(wú)需直接變成操作SecurityManager;Realm是應(yīng)用程序和安全數(shù)據(jù)之間的連接器。 應(yīng)用程序要進(jìn)行權(quán)限控制,就 需要讀取數(shù)據(jù)表中的數(shù)據(jù),也許數(shù)據(jù)并不是存儲(chǔ)在數(shù)據(jù)表中,可能存儲(chǔ)在文件或 網(wǎng)絡(luò)上,但不管怎樣,都是需要讀取數(shù)據(jù)的,那么就一定需要通過(guò)Realms對(duì)象來(lái)讀取這些安全數(shù)據(jù)。以用戶登錄流程為例,應(yīng)用程序首先是去調(diào)用Subject,Subject去調(diào)用SecurtyManager安全管理器 ,SecurtyManager去調(diào)用Realm,Realm再去讀取安全數(shù)據(jù)。
Shiro進(jìn)行權(quán)限控制
主要有四種主要的方式:
在程序中,通過(guò)Subject以編程方式進(jìn)行權(quán)限控制。
通過(guò)配置Filter,實(shí)現(xiàn)URL級(jí)別粗粒度的權(quán)限控制 。
通過(guò)配置代理,基于注解實(shí)現(xiàn)細(xì)粒度的權(quán)限控制。
在頁(yè)面中使用shiro自定義標(biāo)簽實(shí)現(xiàn)頁(yè)面顯示的權(quán)限控制。
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Apache Shiro的运行流程和权限控制方式分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Apache Shiro权限控制框架简介
- 下一篇: hibernate的懒加载(延迟加载)问