apache shiro基礎(chǔ)概念

apache shiro基礎(chǔ)概念

一、什么是權(quán)限管理

1、概念

只要有用戶系統(tǒng)的的軟件,基本上都會(huì)涉及的權(quán)限管理,權(quán)限管理實(shí)現(xiàn)對(duì)用戶訪問系統(tǒng)的控制。一般指根據(jù)系統(tǒng)設(shè)置的安全規(guī)則或者安全策略,用戶可以訪問而且只能訪問自己被授權(quán)的資源

2、分類

  1. 頁(yè)面權(quán)限: 比如我們后臺(tái)管理員界面就不允許普通用戶訪問

  2. 操作權(quán)限

  3. 數(shù)據(jù)權(quán)限

3、組成

  1. 用戶認(rèn)證

    用戶去訪問系統(tǒng),系統(tǒng)需要驗(yàn)證用戶身份的合法性。最常用的用戶身份認(rèn)證方法:用戶密碼、證書,指紋,人臉識(shí)別等方法。系統(tǒng)驗(yàn)證用戶身份合法,用戶方可訪問系統(tǒng)的資源

  2. 用戶授權(quán)

    用戶授權(quán),簡(jiǎn)單理解為訪問控制,在用戶認(rèn)證通過后,系統(tǒng)對(duì)用戶訪問資源進(jìn)行控制,當(dāng)用戶具有資源的訪問權(quán)限方可訪問。

4、認(rèn)證授權(quán)流程圖

image

二、什么是 apache shiro

Apache Shiro是一個(gè)功能強(qiáng)大且易于使用的Java安全框架,提供了認(rèn)證,授權(quán),加密,和會(huì)話管理,如同 Spring security 一樣都是是一個(gè)權(quán)限安全框架,但是與Spring Security相比,在于他使用了和比較簡(jiǎn)潔易懂的認(rèn)證和授權(quán)方式。

三、Apache Shiro 核心功能

1、結(jié)構(gòu)圖

image

2、Authentication

身份認(rèn)證,有時(shí)也簡(jiǎn)稱為“登錄”,這是一個(gè)證明用戶是他們所說(shuō)的他們是誰(shuí)的行為

3、Authorization

授權(quán)權(quán)限驗(yàn)證,驗(yàn)證某個(gè)已認(rèn)證的用戶是否擁有某個(gè)權(quán)限;即判斷用戶是否能做事情,常見的如:驗(yàn)證某個(gè)用戶是否擁有某個(gè)角色?;蛘呒?xì)粒度的驗(yàn)證某個(gè)用戶對(duì)某個(gè)資源是否具有某個(gè)權(quán)限;

4、Session Manager

會(huì)話管理,即用戶登錄后就是一次會(huì)話,在沒有退出之前,它的所有信息都在會(huì)話中;會(huì)話可以是普通 JavaSE 環(huán)境的,也可以是如 Web 環(huán)境的;

5、Cryptography

加密,保護(hù)數(shù)據(jù)的安全性,如密碼加密存儲(chǔ)到數(shù)據(jù)庫(kù),而不是明文存儲(chǔ);

6、Web Support

Web 支持,可以非常容易的集成到 Web 環(huán)境

7、Caching

緩存,比如用戶登錄后,其用戶信息、擁有的角色 / 權(quán)限不必每次去查,這樣可以提高效率;

8、Remember Me

記住我,這個(gè)是非常常見的功能,即一次登錄后,下次再來(lái)的話不用登錄了。

9、Concurrency

shiro 支持多線程應(yīng)用的并發(fā)驗(yàn)證,即如在一個(gè)線程中開啟另一個(gè)線程,能把權(quán)限自動(dòng)傳播過去;

10、Run As

允許一個(gè)用戶假裝為另一個(gè)用戶(如果他們?cè)试S)的身份進(jìn)行訪問;

11、Testing

提供測(cè)試支持;

注意: 需要注意的是,Shiro 不會(huì)去維護(hù)用戶、維護(hù)權(quán)限;這些需要我們自己去設(shè)計(jì) / 提供;然后通過相應(yīng)的接口注入給 Shiro 即可。

四、Apache Shiro 的三大概念

1、概念

應(yīng)用軟件通常是基于用戶背景情況設(shè)計(jì)的。也就是說(shuō),你將經(jīng)常設(shè)計(jì)用戶接口或服務(wù)API,基于一個(gè)用戶將要(或應(yīng)該)如何與該軟件交互。例如,你可能會(huì)說(shuō),“如果用戶與我的應(yīng)用程序交互的用戶已經(jīng)登錄,我將顯示一個(gè)他們能夠點(diǎn)擊的按鈕來(lái)查看他們的帳戶信息。如果他們沒有登錄,我將顯示一個(gè)登錄按鈕?!?/p>

這個(gè)簡(jiǎn)單的陳述表明應(yīng)用程序很大程度上的編寫是為了滿足用戶的要求和需要。即使該“用戶”是另一個(gè)軟件系統(tǒng)而不是一個(gè)人類,你仍然得編寫代碼來(lái)響應(yīng)行為,基于當(dāng)前與你的軟件進(jìn)行交互的人或物。

image

2、Subject

當(dāng)前用戶的操作

是程序安全視角的user。然而user通常指人類,但Subject可以是人,也可以指第三方的服務(wù),守護(hù)進(jìn)程賬戶,定時(shí)任務(wù),或者其他類似的東西-基本上可以是和軟件交互的任何事物。

Subject 的實(shí)例都綁定在SecurityManager上。當(dāng)你和subject交互時(shí),SecurityManager把交互轉(zhuǎn)化為subject領(lǐng)域的交互

3、SecurityManager

用于管理所有的Subject

SecurityManager是Shiro架構(gòu)的核心,他扮演著傘對(duì)象的角色(持有各組件引用,協(xié)調(diào)調(diào)用),來(lái)協(xié)調(diào)它內(nèi)部的安全組件,他們一塊來(lái)形成對(duì)象視圖。然而,一旦程序中的SecurityManager和他內(nèi)部對(duì)象已經(jīng)配置好,通常上就不用再管他,程序的開發(fā)人員幾乎大部分時(shí)間都會(huì)花在Subject API上。

4、Realms

用于進(jìn)行權(quán)限信息的驗(yàn)證

Realms在Shiro和你的程序安全數(shù)據(jù)之間,扮演著橋梁或者連接器的角色。當(dāng)和安全相關(guān)數(shù)據(jù)有交互時(shí),比如用戶登錄校驗(yàn)和鑒權(quán),Shiro通過程序中配置的一個(gè)或者多個(gè)Realm來(lái)查詢。

在此場(chǎng)景中,Realm是安全領(lǐng)域的DAO:它封裝了數(shù)據(jù)源連接的細(xì)節(jié),使得相關(guān)數(shù)據(jù)對(duì)于shiro可用。當(dāng)你配置Shiro,你必須指定至少一個(gè)realm用來(lái)登錄和授權(quán)。SecurityManager可能會(huì)配置多個(gè)Realm,但是至少有一個(gè)

五、Authentication 和 Authorization

在shiro的用戶權(quán)限認(rèn)證過程中其通過兩個(gè)方法來(lái)實(shí)現(xiàn)

1、Authentication

Shiro 認(rèn)證更大程度上特指用戶登錄并對(duì)用戶信息進(jìn)行校驗(yàn)(這里的信息通常特指principal信息,常見的為用戶名/密碼組合),如果信息驗(yàn)證成功則順序執(zhí)行代碼,否則拋出異常

2、Authorization

授權(quán)訪問控制,用于對(duì)用戶進(jìn)行的操作進(jìn)行人證授權(quán),證明該用戶是否允許進(jìn)行當(dāng)前操作,如訪問某個(gè)鏈接,某個(gè)資源文件等。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容