SpringBoot3整合SpringSecurity6快速入門(mén)示例教程
寫(xiě)在前面
不知道小伙伴們?cè)趯W(xué)SpringSecurity
過(guò)程中有沒(méi)有和我一樣的經(jīng)歷和煩惱。
①看完一篇文章或者一個(gè)教程,感覺(jué)學(xué)會(huì)了。但是一到實(shí)際項(xiàng)目中就不知道怎么用;
②被SprintSecurity
源碼和各種專(zhuān)業(yè)名詞搞得一頭霧水,不知道如何下手,直接勸退;
③技術(shù)更新迭代非??欤W(wǎng)上一些文章教程知識(shí)點(diǎn)已經(jīng)過(guò)時(shí)了,在新版本中已經(jīng)不適用了。
曉凡在學(xué)習(xí)過(guò)程中也同樣遇到了這些問(wèn)題,也被勸退過(guò)。但是,現(xiàn)在的安全框架也就那么幾個(gè),難啃也得硬著頭皮上。
原本打算一篇文章寫(xiě)完,但是基于SprintSecurity
涉及到的知識(shí)點(diǎn)確實(shí)挺多,文章篇幅肯定很長(zhǎng)。
基于這些原因,曉凡打算將SpringBoot3
整合SpringSecurity6
寫(xiě)成一個(gè)系列文章,文章盡可能的通俗易懂,循序漸進(jìn),并穿插實(shí)際項(xiàng)目開(kāi)發(fā)實(shí)例。
讓小伙伴們學(xué)起來(lái)沒(méi)啥壓力,學(xué)完之后能將SpringSecurity
運(yùn)用到實(shí)際項(xiàng)目中。
當(dāng)然,每個(gè)人的理解方式不同,可能有些重要的細(xì)節(jié)沒(méi)講到位,歡迎大家在評(píng)論區(qū)提問(wèn)。受限于個(gè)人水平,一定有說(shuō)的不對(duì)的地方,大家理解一下,友善白嫖哈。
一、環(huán)境說(shuō)明
現(xiàn)在技術(shù)更新迭代真的很快,不少小伙伴還在抱怨,怎么又更新了,學(xué)不動(dòng)了。曉凡也采用當(dāng)前最新穩(wěn)定版本的進(jìn)行講解,具體如下
SpringBoot 3.2.0
SpringSecurity 6.2.0
JDK 17
MySQL 8.0
二、SpringSecurity 簡(jiǎn)介
SpringSecurity
是Spring
大家族中一名重要成員,是專(zhuān)門(mén)負(fù)責(zé)安全的框架。
提到安全框架,做過(guò)Java開(kāi)發(fā)的小伙伴可能還聽(tīng)說(shuō)過(guò)Shiro
。Shiro
相對(duì)于Spring Security
來(lái)說(shuō),更加簡(jiǎn)單。一般小型項(xiàng)目使用得比較多,
這里就不展開(kāi)說(shuō)了,感興趣的小伙伴可以評(píng)論區(qū)留言,曉凡后面出教程。Spring Security
一般用在中大型項(xiàng)目中。
Spring Security
能為項(xiàng)目做什么呢?
我們來(lái)看看官方文檔:https://docs.spring.io/spring-security/reference/index.html怎么說(shuō)的?
翻譯過(guò)來(lái)大概就是:Spring Security
是一個(gè)提供了身份驗(yàn)證、授權(quán)和防止常見(jiàn)攻擊的功能的框架。
三、常用名詞解釋
上面提到了身份驗(yàn)證、授權(quán)和防止常見(jiàn)攻擊 三個(gè)專(zhuān)業(yè)名詞。曉凡這里以小區(qū)中的保安系統(tǒng)來(lái)說(shuō)明,大家肯定就秒懂了。
為了小區(qū)的安全,小區(qū)上了保安系統(tǒng),確保只有合法的居民可以進(jìn)入小區(qū),并且他們只能訪問(wèn)自己的家,同時(shí)防止小偷和法外狂徒張三進(jìn)來(lái)?yè)v亂。
身份認(rèn)證(Authentication):
- 就是確認(rèn)你是誰(shuí)的過(guò)程。
Spring Security
會(huì)要求你提供一些信息,比如用戶(hù)名和密碼,然后它會(huì)檢查這些信息是否正確。如果信息正確,就相當(dāng)于給你發(fā)了一張小區(qū)的門(mén)禁卡,你就可以進(jìn)入小區(qū)了。
授權(quán)(Authorization):
- 就是決定你可以做什么的過(guò)程。即使你進(jìn)了小區(qū),也不能隨便去別人家。
Spring Security
會(huì)檢查你是否有權(quán)限去某個(gè)地方,比如你的家。你有權(quán)限,就可以進(jìn)入;而隔壁老王,沒(méi)有你家的權(quán)限,就會(huì)被拒之門(mén)外。
防御常見(jiàn)攻擊:
- 就像小區(qū)保安要防止小偷和張三一樣,
Spring Security
也提供了很多功能來(lái)防止各種網(wǎng)絡(luò)攻擊:- CSRF(跨站請(qǐng)求偽造):防止有人偽造你的請(qǐng)求,比如在你不知情的情況下,讓你的賬號(hào)發(fā)一些你不想要的帖子。
- XSS(跨站腳本攻擊):防止有人通過(guò)網(wǎng)頁(yè)注入惡意腳本,偷取你的個(gè)人信息。
- SQL注入:防止有人通過(guò)輸入特殊的命令,來(lái)操縱數(shù)據(jù)庫(kù),獲取或破壞數(shù)據(jù)。
- 點(diǎn)擊劫持:防止有人通過(guò)一些手段,讓你在不知情的情況下點(diǎn)擊一些鏈接,從而執(zhí)行一些你不想執(zhí)行的操作。
四、快速入門(mén)
說(shuō)了一堆理論知識(shí),下面曉凡帶著大家敲代碼,快速上手
4.1 搭建一個(gè)Spring Boot Web項(xiàng)目
① 創(chuàng)建SecurityQuickStart
項(xiàng)目
② 創(chuàng)建controller
@RestController public class HelloController { @GetMapping("/hello") public String hello(){ return "曉凡,你好!"; } }
③ 啟動(dòng)項(xiàng)目,瀏覽器訪問(wèn)/hello接口
瀏覽器中訪問(wèn):http://localhost:8080/hello
4.2 引入SpringSecurity
① 引入依賴(lài)
在SpringBoot
項(xiàng)目中使用SpringSecurity
,我們只需要引入如下依賴(lài)即可
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
② 訪問(wèn)接口
依然在瀏覽器中輸入:http://localhost:8080/hello
這時(shí)候,我們發(fā)現(xiàn)hello接口不能訪問(wèn)了,而是跳轉(zhuǎn)到一個(gè)登錄頁(yè)面:http://localhost:8080/login
這時(shí)候我們需要輸入用戶(hù)名和密碼才能訪問(wèn)接口
用戶(hù)名默認(rèn)為:user
密碼會(huì)在控制臺(tái)中打印出來(lái)
注意:如果你沒(méi)使用魔法上網(wǎng),可能登錄頁(yè)面會(huì)如下圖所示一樣
遇到這樣的,小伙伴也不用慌,這是由于訪問(wèn)不了bootstrap.min.css
樣式造成的,并不影響正常業(yè)務(wù)流程
點(diǎn)擊"Sign in"進(jìn)行登錄,就可以正常訪問(wèn)接口了
4.3 配置默認(rèn)用戶(hù)/密碼
默認(rèn)情況下SpringSecurity
會(huì)為我們默認(rèn)生成一個(gè)user用戶(hù),密碼采用uuid隨機(jī)生成(通過(guò)下圖中SecurityProperties
類(lèi)的靜態(tài)內(nèi)部類(lèi)user生成)。
我們還可以通過(guò)application.yml
配置文件來(lái)配置用戶(hù)名和密碼
spring: security: user: password: 123456 name: admin
通過(guò)上面配置之后,控制臺(tái)將不再輸出隨機(jī)生成的密碼,我們也可以通過(guò)admin/123456 登錄
4.4 注銷(xiāo)
既然能登陸,那必然也是可以注銷(xiāo)的。
我們只需瀏覽器輸入:http://localhost:8080/logout 然后點(diǎn)擊Log Out 即可注銷(xiāo)
五、SpringSecurity 默認(rèn)做了什么?
到這兒,我們算是正是入門(mén)了。其實(shí)我們出了引入依賴(lài),其他啥也沒(méi)干。那么SpringSecurity
默認(rèn)為我們做了些什么?
① 保護(hù)我們創(chuàng)建的/hello接口,不是隨便一個(gè)老王就能來(lái)訪問(wèn),要求對(duì)應(yīng)用程序的任何交互進(jìn)行身份驗(yàn)證;
② 程序啟動(dòng)時(shí)生成一個(gè)默認(rèn)用戶(hù)“user”;
③ 生成一個(gè)默認(rèn)的隨機(jī)密碼,并將此密碼記錄在控制臺(tái)上;
④ 生成默認(rèn)的登錄表單和注銷(xiāo)頁(yè)面,并提供登錄和注銷(xiāo)功能;
⑤ 對(duì)于請(qǐng)求,重定向到登錄頁(yè)面
到此這篇關(guān)于SpringBoot3整合SpringSecurity6(一)快速入門(mén)的文章就介紹到這了,更多相關(guān)SpringBoot整合SpringSecurity內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Springboot整合SpringSecurity的完整案例詳解
- SpringBoot整合SpringSecurity和JWT和Redis實(shí)現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證
- SpringBoot整合SpringSecurity實(shí)現(xiàn)認(rèn)證攔截的教程
- SpringBoot快速整合SpringSecurity的詳細(xì)步驟(新手都會(huì)!)
- SpringBoot整合SpringSecurity實(shí)現(xiàn)JWT認(rèn)證的項(xiàng)目實(shí)踐
- Springboot詳解整合SpringSecurity實(shí)現(xiàn)全過(guò)程
- SpringBoot如何整合Springsecurity實(shí)現(xiàn)數(shù)據(jù)庫(kù)登錄及權(quán)限控制
- springboot整合springsecurity與mybatis-plus的簡(jiǎn)單實(shí)現(xiàn)
- SpringSecurity整合springBoot、redis實(shí)現(xiàn)登錄互踢功能
相關(guān)文章
SpringBoot+STOMP協(xié)議實(shí)現(xiàn)私聊、群聊
本文將結(jié)合實(shí)例代碼,介紹SpringBoot+STOMP協(xié)議實(shí)現(xiàn)私聊、群聊,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06淺談在springboot中使用定時(shí)任務(wù)的方式
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著在springboot中使用定時(shí)任務(wù)的方式展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06在Spring Boot中如何使用數(shù)據(jù)緩存
本篇文章主要介紹了在Spring Boot中如何使用數(shù)據(jù)緩存,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-04-04Spring boot實(shí)現(xiàn)文件上傳實(shí)例(多文件上傳)
本篇文章主要介紹了Spring boot實(shí)現(xiàn)文件上傳實(shí)例(多文件上傳),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05springboot集成mybatisplus實(shí)例詳解
這篇文章主要介紹了springboot集成mybatisplus實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09java中fastjson生成和解析json數(shù)據(jù)(序列化和反序列化數(shù)據(jù))
本篇文章主要介紹了java中fastjson生成和解析json數(shù)據(jù)(序列化和反序列化數(shù)據(jù)),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02Mybatis詳解在注解sql時(shí)報(bào)錯(cuò)的解決方法
MyBatis-Plus 是一個(gè) Mybatis 增強(qiáng)版工具,在 MyBatis 上擴(kuò)充了其他功能沒(méi)有改變其基本功能,為了簡(jiǎn)化開(kāi)發(fā)提交效率而存在,本篇文章帶你看看在注解sql時(shí)所報(bào)出的錯(cuò)誤解決2022-03-03Java中Arrays.asList()方法詳解及實(shí)例
這篇文章主要介紹了Java中Arrays.asList()方法將數(shù)組作為列表時(shí)的一些差異的相關(guān)資料,需要的朋友可以參考下2017-06-06java實(shí)現(xiàn)文件變化監(jiān)控的方法(推薦)
下面小編就為大家?guī)?lái)一篇java實(shí)現(xiàn)文件變化監(jiān)控的方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08