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、分類
頁(yè)面權(quán)限: 比如我們后臺(tái)管理員界面就不允許普通用戶訪問
操作權(quán)限
數(shù)據(jù)權(quán)限
3、組成
-
用戶認(rèn)證
用戶去訪問系統(tǒng),系統(tǒng)需要驗(yàn)證用戶身份的合法性。最常用的用戶身份認(rèn)證方法:用戶密碼、證書,指紋,人臉識(shí)別等方法。系統(tǒng)驗(yàn)證用戶身份合法,用戶方可訪問系統(tǒng)的資源
-
用戶授權(quán)
用戶授權(quán),簡(jiǎn)單理解為訪問控制,在用戶認(rèn)證通過后,系統(tǒng)對(duì)用戶訪問資源進(jìn)行控制,當(dāng)用戶具有資源的訪問權(quán)限方可訪問。
4、認(rèn)證授權(quán)流程圖

二、什么是 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)圖

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è)資源文件等。
