Apache Shiro-Java安全框架
主要內(nèi)容
Shiro簡介
Shiro架構(gòu)原理
INI文件介紹
Shiro環(huán)境搭建及認(rèn)證過程
第一個Shiro演示
授權(quán)
加密及憑證匹配器
自定義Realm
憑證匹配器
Spring Boot整合Shiro實現(xiàn)登錄認(rèn)證

一、Shiro 簡介
1、概述
權(quán)限體系在現(xiàn)代軟件應(yīng)用中有著非常重要的地位。一個應(yīng)用如果沒有權(quán)限體系都會顯著這個系統(tǒng)“特別不安全”,無論是傳統(tǒng)的MIS系統(tǒng)還是互聯(lián)網(wǎng)項目出于對業(yè)務(wù)數(shù)據(jù)和應(yīng)用自身的安全,都會設(shè)置自己的安全策略。
目前市場上專門的Java權(quán)限框架有Apache Shiro 和 Spring Security。相較于Spring Security 來說 Shiro更加老牌,所以就先講解Shiro,在后面的階段中講解Spring Security。學(xué)習(xí)好Shiro對于以后市場上在出現(xiàn)新型權(quán)限框架的學(xué)習(xí)能帶來很大便利。因為權(quán)限的概念是不變的,變得是框架的實現(xiàn)方式。當(dāng)然了,對于第一次學(xué)習(xí)權(quán)限框架的人來說,相較于權(quán)限框架的應(yīng)用,更難的就是權(quán)限方面的概念。

2、Shiro官方解釋

中文:Apache Shiro是一個強大的并且簡單使用的java權(quán)限框架.主要應(yīng)用認(rèn)證(Authentication),授權(quán)(Authorization),cryptography(加密),和Session Manager.Shiro具有簡單易懂的API,使用Shiro可以快速并且簡單的應(yīng)用到任何應(yīng)用中,無論是從最小的移動app到最大的企業(yè)級web應(yīng)用都可以使用。

3、核心功能
在Shiro官網(wǎng)首頁上占用了很大的篇幅說明了Shiro的核心功能。
Authentication?認(rèn)證。如用戶的登錄。
Authorization?授權(quán)。用戶是否有權(quán)限訪問指定URL等。
Cryptography?密碼學(xué)。如密碼的加密。
Session Management?Session 管理。
Web Integration?Web集成。Shiro不依賴于容器。

二、Shiro 架構(gòu)原理
(必須會。Shiro學(xué)習(xí)的重中之重。)

1、第一行
第一行中示例出了一些語言。無論是什么語言都需要包含Subject
2、Subject
主體。每個用戶登錄成功后都會對應(yīng)一個Subject對象,所有用戶信息都存放在Subject中??梢岳斫猓篠ubject就是Shiro提供的用戶實體類。
3、Security Manager
Shiro最大的容器,此容器中包含了Shiro的絕大多數(shù)功能。在非Spring Boot項目中,獲取Security Manager 是編寫代碼的第一步。而在Spring Boot中已經(jīng)幫助我們自動化配置了。
4、Authenticator
認(rèn)證器。執(zhí)行認(rèn)證過程調(diào)用的組件。里面包含了認(rèn)證策略。

5、Authorizer
授權(quán)器。執(zhí)行授權(quán)時調(diào)用的組件。
6、Session Manager
Shiro被Web集成后,HttpSession對象會由Shiro的Session Manager進(jìn)行管理。
7、Cache Manager
緩存管理。Shiro執(zhí)行很多第三方緩存技術(shù)。例如:EHCache等。
8、Session DAO
操作Session內(nèi)容的組件。

9、Realms
Shiro框架實現(xiàn)權(quán)限控制不依賴于數(shù)據(jù)庫,通過內(nèi)置數(shù)據(jù)也可以實現(xiàn)權(quán)限控制。但是目前絕大多數(shù)應(yīng)用的數(shù)據(jù)都存儲在數(shù)據(jù)庫中,所以Shiro提供了Realms組件,此組件的作用就是訪問數(shù)據(jù)庫。Shiro內(nèi)置的訪問數(shù)據(jù)庫的代碼,通過簡單配置就可以訪問數(shù)據(jù)庫,也可以自定義Realms實現(xiàn)訪問數(shù)據(jù)庫邏輯(絕大多數(shù)都這么做)
三、INI文件介紹
INI英文名稱(InitializationFile)
INI文件是Window系統(tǒng)配置文件的擴展名.
Shiro的全局配置文件就是.ini文件,ini中數(shù)據(jù)都是固定數(shù)據(jù),后面會用數(shù)據(jù)庫中數(shù)據(jù)替代下面users和roles(固定數(shù)據(jù)部分)
.ini文件內(nèi)容的語法和.properties類似都是key=value,value格式.

INI文件中包含了四個部分:
1、[main] 主體部分.
這部分配置類對象,或設(shè)置屬性等操作.
內(nèi)置了根對象:securityManager,注意對象名大小寫。

4、[urls]
定義哪個控制器被哪個過濾器過濾.Shiro內(nèi)置很多過濾器。此部分主要在WEB應(yīng)用中使用。
下圖是官網(wǎng)上提供的Shiro內(nèi)置Filter及名稱。

anon:不認(rèn)證也可以訪問。例如:/admin/**=anon /login=anon
authc:必須認(rèn)證。 /**=authc ---所有的資源都認(rèn)證
authcBasic:沒有參數(shù)時表示httpBasic認(rèn)證(客戶端認(rèn)證方式)。
logout:退出。
noSessionCreation:新增Filter,表示沒有Session創(chuàng)建。
perms:判斷是有具有指定權(quán)限。例如:/admin/user/**=perms[“per1”,”per2”]。必須同時具有給定權(quán)限才可以訪問。如果只有一個權(quán)限可以省略雙引號。
port:限制端口。例如:/admin/**=port[8081]。只要請求不是8081端口就重新發(fā)送URL到8081端口。
rest:請求方式和權(quán)限的簡便寫法。例如:/admin/**=rest[user],相當(dāng)于/admin/** = perms[user:方式],方式是http請求的方式:post、get等。
roles:判斷是否具有指定角色。/admin/**=roles[role1]
ssl:表示是安全的請求。協(xié)議為https
user:表示必須存在用戶。


作為IT人,我們也在不斷地要求自己,為學(xué)員做出更多更好的視頻課程;這次的課程我們集合了2020年所有新型的前端技術(shù),整理出了適合廣大學(xué)員學(xué)習(xí)的web前端課程,與以往相比,內(nèi)容更加豐富,極力保證學(xué)員所學(xué)技術(shù)緊跟時代步伐!