簡(jiǎn)介
先贅述一下身份認(rèn)證和用戶授權(quán):
- 用戶認(rèn)證(
Authentication
):系統(tǒng)通過(guò)校驗(yàn)用戶提供的用戶名和密碼來(lái)驗(yàn)證該用戶是否為系統(tǒng)中的合法主體,即是否可以訪問(wèn)該系統(tǒng); - 用戶授權(quán)(
Authorization
):系統(tǒng)為用戶分配不同的角色,以獲取對(duì)應(yīng)的權(quán)限,即驗(yàn)證該用戶是否有權(quán)限執(zhí)行該操作;
Web
應(yīng)用的安全性包括用戶認(rèn)證和用戶授權(quán)兩個(gè)部分,而
Spring Security
(以下簡(jiǎn)稱
Security
)基于
Spring
框架,正好可以完整解決該問(wèn)題。它的真正強(qiáng)大之處在于它可以輕松擴(kuò)展以滿足自定義要求。
原理
Security
可以看做是由一組
filter
過(guò)濾器鏈組成的權(quán)限認(rèn)證。它的整個(gè)工作流程如下所示:
圖中綠色認(rèn)證方式是可以配置的,橘黃色和藍(lán)色的位置不可更改:
FilterSecurityInterceptor
:最后的過(guò)濾器,它會(huì)決定當(dāng)前的請(qǐng)求可不可以訪問(wèn)Controller
ExceptionTranslationFilter
:異常過(guò)濾器,接收到異常消息時(shí)會(huì)引導(dǎo)用戶進(jìn)行認(rèn)證;
實(shí)戰(zhàn)
項(xiàng)目準(zhǔn)備
我們使用
Spring Boot
框架來(lái)集成。1.
pom
文件引入的依賴
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-tomcat
org.springframework.boot
spring-boot-starter-undertow
mysql
mysql-connector-java
com.baomidou
mybatis-plus-boot-starter
3.4.0
org.projectlombok
lombok
com.alibaba
fastjson
1.2.74
joda-time
joda-time
2.10.6
org.springframework.boot
spring-boot-starter-test
2.
application.yml
配置
spring:
application:
name: securityjwt
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/cheetah?characterEncoding=utf-8