Shiro教程+springboot整合shiro(一:基礎(chǔ)學(xué)習(xí))


前言:

大家做登錄,權(quán)限什么的都是五花八門削樊,各種花里胡哨的代碼滥搭,不同系統(tǒng)的做法很有可能千差萬別酸纲。但是使用shiro這個(gè)安全框架之后,大家做權(quán)限的方式都一致化了论熙,這樣的好處就是你的代碼看起來容易福青,我的代碼你也好理解。shiro也比較成熟脓诡,基本上滿足大部分的權(quán)限需要无午。

什么是Shiro

Apache Shiro是一個(gè)功能強(qiáng)大、靈活的祝谚,開源的安全(權(quán)限)框架宪迟。它將軟件系統(tǒng)的安全認(rèn)證向相關(guān)的功能抽取出來,實(shí)現(xiàn)用戶身份認(rèn)證交惯,權(quán)限授權(quán)次泽,加密,會(huì)話管理等功能席爽,組成一個(gè)通用的安全認(rèn)證框架意荤。

Shiro和Spring Security比較

都是用來做項(xiàng)目中的權(quán)限管理

簡(jiǎn)單易用,只需要花費(fèi)很少的時(shí)間只锻。

符合公司的業(yè)務(wù)需求 和開發(fā)成本玖像,團(tuán)隊(duì)的學(xué)習(xí)成本

Shiro 致力在所有應(yīng)用環(huán)境下實(shí)現(xiàn)上述功能,小到命令行應(yīng)用程序齐饮,大到企業(yè)應(yīng)用中捐寥,而且不 需要借助第三方框架笤昨、容器、應(yīng)用服務(wù)器等握恳。當(dāng)然 Shiro 的目的是盡量的融入到這樣的應(yīng)用環(huán) 境中去瞒窒,但也可以在它們之外的任何環(huán)境下開箱即用。

寫代碼

為什么要用shiro

使用shiro就可以非诚缤荩快速的完成認(rèn)證崇裁,授權(quán)等功能的開發(fā),降低系統(tǒng)的成本時(shí)間

shiro使用廣泛就珠,shiro可以運(yùn)行在web應(yīng)用寇壳,非web應(yīng)用,集群分布式應(yīng)用中使用shiro的用戶也越來越多

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

shiro主要是完成權(quán)限管理

? 基本涉及到用戶參與的系統(tǒng)都要進(jìn)行權(quán)限管理妻怎,權(quán)限管理屬于系統(tǒng)安全的范疇(只要有人的參與都要進(jìn)行權(quán)限管理)壳炎,權(quán)限管理實(shí)現(xiàn)對(duì)用戶訪問系統(tǒng)的控制,按照安全規(guī)則或者安全策略控制用戶可以訪問而且只能訪問自己被授權(quán)的資源逼侦。

權(quán)限管理包括用戶身份驗(yàn)證和授權(quán)兩部分匿辩,簡(jiǎn)稱認(rèn)證授權(quán),對(duì)于需要訪問控制的資源用戶首先經(jīng)過身份認(rèn)證榛丢,認(rèn)證通過后用戶具有該資源的訪問權(quán)限可訪問铲球。

shiro有什么用

驗(yàn)證用戶來核實(shí)他們的身份

1.對(duì)用戶執(zhí)行訪問控制:①判斷用戶是否被分配了一個(gè)確定安全的角色

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?②判斷用戶是否被允許做某事

2.在任何環(huán)境下使用Session API,即使沒有Web或EJB容器晰赞。

3.在身份驗(yàn)證稼病,訪問控制期間或在會(huì)話的生命周期,對(duì)事件作出反應(yīng)掖鱼。

4.聚集一個(gè)或多個(gè)用戶安全數(shù)據(jù)的數(shù)據(jù)源然走,并作為一個(gè)單一的復(fù)合用戶“視圖”。

5.啟用單點(diǎn)登錄(SSO)功能戏挡。

6.為沒有關(guān)聯(lián)到登錄的用戶啟用"Remember Me"服務(wù)

7.以及更多——全部集成到緊密結(jié)合的易于使用的API中

Shiro 視圖在所有應(yīng)用程序環(huán)境下實(shí)現(xiàn)這些目標(biāo)——從最簡(jiǎn)單的命令行應(yīng)用程序到最大的企業(yè)應(yīng)用芍瑞,不強(qiáng)制依賴其他第三方框架,容器褐墅,或應(yīng)用服務(wù)器拆檬。當(dāng)然,該項(xiàng)目的目標(biāo)是盡可能地融入到這些環(huán)境妥凳,但它能夠在任何環(huán)境下立即可用竟贯。

Shiro特性

全面的,蘊(yùn)含豐富功能的安全框架

Authentication(認(rèn)證):通常被稱為“登錄” 逝钥,是一個(gè)證明當(dāng)前用戶的身份是否是 ? ? 所說的用戶的行為

Authorization(授權(quán)):訪問控制的過程澄耍。就是某個(gè)用戶是否具有某個(gè)訪問的權(quán)限 ? 或某個(gè)操作的使用權(quán)限。

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

Cryptography(加密):在對(duì)數(shù)據(jù)源使用加密算法加密的同時(shí),保證易于使用岳枷。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 保護(hù)數(shù)據(jù)的安全性芒填,例如密碼加密存儲(chǔ)到數(shù)據(jù)庫,而不是 通過明文存儲(chǔ)空繁。

還有其他功能來支持和加強(qiáng)這些不同應(yīng)用環(huán)境下安全領(lǐng)域的關(guān)注點(diǎn)殿衰,特別是對(duì)一下功能的支持:

Web支持:Shiro 提供的 web 支持 api ,可以很輕松的保護(hù) web 應(yīng)用程序的安? ? ? ? ? ? ? ? ? ? ? ? ? ? 全盛泡。

緩存:例如用戶登錄之后闷祥,其用戶信息,用戶角色權(quán)限等都不需要每次都進(jìn)行查 ? ? 詢傲诵,是 Apache Shiro 保證安全操作快速凯砍、高效的重要手段。

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

測(cè)試:支持單元測(cè)試和集成測(cè)試悟衩,確保代碼和預(yù)想的一樣安全。

"Run As":這個(gè)功能允許用戶假設(shè)另一個(gè)用戶的身份(在許可的前提下),有時(shí)候再管? ? ? ? ? ? ? ? ? ? ? 理腳本很有用

"Remember Me":跨 session 記錄用戶的身份栓拜,只有在強(qiáng)制需要時(shí)才需要登錄座泳。

Shiro架構(gòu)

Shiro的三個(gè)核心組件

Subject

Subject:即“當(dāng)前操作用發(fā)戶”。但是幕与,在Shiro中挑势,Subject這一概念并不僅僅指人,也可以是第三方進(jìn)程纽门、后臺(tái)帳戶(Daemon Account)或其他類似事物薛耻。它僅僅意味著“當(dāng)前跟軟件交互的東西”。但考慮到大多數(shù)目的和用途赏陵,你可以把它認(rèn)為是Shiro的“用戶”概念饼齿。Subject代表了當(dāng)前用戶的安全操作,SecurityManager則管理所有用戶的安全操作蝙搔。

SecurityManager

SecurityManager是Shiro架構(gòu)的心臟缕溉,并作為一種“保護(hù)傘”對(duì)象來協(xié)調(diào)內(nèi)部的安全組件共同構(gòu)成一個(gè)對(duì)象圖。然而吃型,一旦SecurityManager和它的內(nèi)置對(duì)象圖已經(jīng)配置給一個(gè)應(yīng)用程序证鸥,那么它單獨(dú)留下來,且應(yīng)用程序開發(fā)人員幾乎使用他們所有的時(shí)間來處理Subject API。

稍后會(huì)更詳細(xì)地討論SecurityManager枉层,但重要的是要認(rèn)識(shí)到泉褐,當(dāng)你正與一個(gè)Subject進(jìn)行交互時(shí),實(shí)質(zhì)上是幕后的 SecurityManager處理所有繁重的Subject安全操作鸟蜡。這反映在上面的基本流程圖膜赃。

Realm

Realms擔(dān)當(dāng)Shiro和你的應(yīng)用程序的安全數(shù)據(jù)之間的“橋梁”或“連接器”。當(dāng)它實(shí)際上與安全相關(guān)的數(shù)據(jù)如用來執(zhí)行身份驗(yàn)證(登錄)及授權(quán)(訪問控制)的用戶帳戶交互時(shí)揉忘,Shiro 從一個(gè)或多個(gè)為應(yīng)用程序配置的Realm中尋找許多這樣的東西跳座。

在這個(gè)意義上說,Realm本質(zhì)上是一個(gè)特定安全的DAO:它封裝了數(shù)據(jù)源的連接詳細(xì)信息泣矛,使Shiro所需的相關(guān)的數(shù)據(jù)可用疲眷。當(dāng)配置Shiro時(shí),你必須指定至少一個(gè)Realm用來進(jìn)行身份驗(yàn)證和/或授權(quán)您朽。SecurityManager可能配置多個(gè)Realms狂丝,但至少有一個(gè)是必須的。

Shiro提供了立即可用的Realms來連接一些安全數(shù)據(jù)源(即目錄)虚倒,如LDAP美侦,關(guān)系數(shù)據(jù)庫(JDBC),文本配置源魂奥,像 INI 及屬性文件菠剩,以及更多。你可以插入你自己的Realm 實(shí)現(xiàn)來代表自定義的數(shù)據(jù)源耻煤,如果默認(rèn)地Realm不符合你的需求具壮。

像其他內(nèi)置組件一樣,Shiro SecurityManager控制 Realms是如何被用來獲取安全和身份數(shù)據(jù)來代表 Subject 實(shí)例的哈蝇。

工作流程

用戶棺妓、角色、權(quán)限

會(huì)給角色賦予權(quán)限炮赦,給用戶賦予角色

1怜跑、UsernamePasswordToken,Shiro 用來封裝用戶登錄信息吠勘,使用用戶的登錄信息來創(chuàng)建令牌 Token性芬。

2、SecurityManager剧防,Shiro 的核心部分植锉,負(fù)責(zé)安全認(rèn)證和授權(quán)。

3峭拘、Suject俊庇,Shiro 的一個(gè)抽象概念狮暑,包含了用戶信息。

4辉饱、Realm搬男,開發(fā)者自定義的模塊,根據(jù)項(xiàng)目的需求鞋囊,驗(yàn)證和授權(quán)的邏輯全部寫在 Realm 中止后。

5、AuthenticationInfo溜腐,用戶的角色信息集合,認(rèn)證時(shí)使用瓜喇。

6挺益、AuthorzationInfo,角色的權(quán)限信息集合乘寒,授權(quán)時(shí)使用望众。

7、DefaultWebSecurityManager伞辛,安全管理器烂翰,開發(fā)者自定義的 Realm 需要注入到 DefaultWebSecurityManager 進(jìn)行管理才能生效。

8蚤氏、ShiroFilterFactoryBean甘耿,過濾器工廠,Shiro 的基本運(yùn)行機(jī)制是開發(fā)者定制規(guī)則竿滨,Shiro 去執(zhí)行佳恬,具體的執(zhí)行操作就是由 ShiroFilterFactoryBean 創(chuàng)建的一個(gè)個(gè) Filter 對(duì)象來完成。

9.SimpleAuthorizationInfo()獲取角色于游,獲取權(quán)限

10.SimpleAuthenticationInfo()獲取用戶名毁葱,密碼

下一期:Shiro教程+springboot整合shiro(二:代碼學(xué)習(xí))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市贰剥,隨后出現(xiàn)的幾起案子倾剿,更是在濱河造成了極大的恐慌,老刑警劉巖蚌成,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件前痘,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡笑陈,警方通過查閱死者的電腦和手機(jī)际度,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涵妥,“玉大人乖菱,你說我怎么就攤上這事坡锡。” “怎么了窒所?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鹉勒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我吵取,道長(zhǎng)禽额,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任皮官,我火速辦了婚禮脯倒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捺氢。我一直安慰自己藻丢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布摄乒。 她就那樣靜靜地躺著悠反,像睡著了一般。 火紅的嫁衣襯著肌膚如雪馍佑。 梳的紋絲不亂的頭發(fā)上斋否,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音拭荤,去河邊找鬼茵臭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛穷劈,可吹牛的內(nèi)容都是我干的笼恰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼歇终,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼社证!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起评凝,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤追葡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后奕短,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宜肉,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年翎碑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谬返。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡日杈,死狀恐怖遣铝,靈堂內(nèi)的尸體忽然破棺而出佑刷,到底是詐尸還是另有隱情,我是刑警寧澤酿炸,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布瘫絮,位于F島的核電站,受9級(jí)特大地震影響填硕,放射性物質(zhì)發(fā)生泄漏麦萤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一扁眯、第九天 我趴在偏房一處隱蔽的房頂上張望壮莹。 院中可真熱鬧,春花似錦姻檀、人聲如沸垛孔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至狭莱,卻和暖如春僵娃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腋妙。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工默怨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人骤素。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓匙睹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親济竹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子痕檬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容