SpringSecurity 認(rèn)證、注銷、權(quán)限控制功能(注銷、記住密碼、自定義登入頁(yè))
??簡(jiǎn)介
在 Web 開(kāi)發(fā)中,安全一直是非常重要的一個(gè)方面。安全雖然屬于應(yīng)用的非功能性需求,但是應(yīng)該在應(yīng)用 開(kāi)發(fā)的初期就考慮進(jìn)來(lái)。如果在應(yīng)用開(kāi)發(fā)的后期才考慮安全的問(wèn)題,就可能陷入一個(gè)兩難的境地:一方 面,應(yīng)用存在嚴(yán)重的安全漏洞,無(wú)法滿足用戶的要求,并可能造成用戶的隱私數(shù)據(jù)被攻擊者竊??;另一 方面,應(yīng)用的基本架構(gòu)已經(jīng)確定,要修復(fù)安全漏洞,可能需要對(duì)系統(tǒng)的架構(gòu)做出比較重大的調(diào)整,因而 需要更多的開(kāi)發(fā)時(shí)間,影響應(yīng)用的發(fā)布進(jìn)程。因此,從應(yīng)用開(kāi)發(fā)的第一天就應(yīng)該把安全相關(guān)的因素考慮 進(jìn)來(lái),并在整個(gè)應(yīng)用的開(kāi)發(fā)過(guò)程中。
官網(wǎng):Spring Security :: Spring Security
Spring Security是一個(gè)Java框架,用于保護(hù)應(yīng)用程序的安全性。它提供了一套全面的安全解決方案,包括身份驗(yàn)證、授權(quán)、防止攻擊等功能。Spring Security基于過(guò)濾器鏈的概念,可以輕松地集成到任何基于Spring的應(yīng)用程序中。它支持多種身份驗(yàn)證選項(xiàng)和授權(quán)策略,開(kāi)發(fā)人員可以根據(jù)需要選擇適合的方式。此外,Spring Security還提供了一些附加功能,如集成第三方身份驗(yàn)證提供商和單點(diǎn)登錄,以及會(huì)話管理和密碼編碼等??傊琒pring Security是一個(gè)強(qiáng)大且易于使用的框架,可以幫助開(kāi)發(fā)人員提高應(yīng)用程序的安全性和可靠性。
??認(rèn)識(shí)Spring Security
以實(shí)現(xiàn)強(qiáng)大的 Web 安全控制,對(duì)于安全控制,我們僅需要引入 spring-boot-starter-security 模塊,進(jìn)行少量的配置,即可實(shí)現(xiàn)強(qiáng)大的安全管理!
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
記住幾個(gè)類:
- WebSecurityConfigurerAdapter: 自定義Security策略
- AuthenticationManagerBuilder:自定義認(rèn)證策略
- @EnableWebSecurity:開(kāi)啟WebSecurity模式
Spring Security的兩個(gè)主要目標(biāo)是 “認(rèn)證” 和 “授權(quán)”(訪問(wèn)控制)。
??“認(rèn)證”(Authentication)
- 身份驗(yàn)證是關(guān)于驗(yàn)證您的憑據(jù),如用戶名/用戶ID和密碼,以驗(yàn)證您的身份。
- 身份驗(yàn)證通常通過(guò)用戶名和密碼完成,有時(shí)與身份驗(yàn)證因素結(jié)合使用。
??“授權(quán)” (Authorization)
- 授權(quán)發(fā)生在系統(tǒng)成功驗(yàn)證您的身份后,最終會(huì)授予您訪問(wèn)資源(如信息,文件,數(shù)據(jù)庫(kù),資金,位置, 幾乎任何內(nèi)容)的完全權(quán)限。
- 這個(gè)概念是通用的,而不是只在Spring Security 中存在。
??權(quán)限控制和注銷
開(kāi)啟自動(dòng)配置的注銷的功能
//定制請(qǐng)求的授權(quán)規(guī)則
@Override
protected void configure(HttpSecurity http) throws Exception {
//....
//開(kāi)啟自動(dòng)配置的注銷的功能
// /logout 注銷請(qǐng)求
http.logout();
}我們想讓他注銷成功后,依舊可以跳轉(zhuǎn)到首頁(yè)
導(dǎo)入依賴:
<!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleafextras-springsecurity4 --> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity5</artifactId> <version>3.0.4.RELEASE</version> </dependency>
如果注銷404 了,就是因?yàn)樗J(rèn)防止 csrf 跨站請(qǐng)求偽造,因?yàn)闀?huì)產(chǎn)生安全問(wèn)題,我們可以將請(qǐng)求 改為post 表單提交,或者在 spring security 中關(guān)閉 csrf 功能;我們?cè)囋嚕涸?配置中增加
http.csrf().disable();//關(guān)閉csrf功能:跨站請(qǐng)求偽造,默認(rèn)只能通過(guò)post方式提交logout
請(qǐng)求
http.logout().logoutSuccessUrl("/");CSRF(Cross-site request forgery,跨站請(qǐng)求偽造)攻擊是一種惡意利用行為,其核心在于攻擊者通過(guò)技術(shù)手段欺騙用戶瀏覽器去訪問(wèn)一個(gè)已經(jīng)認(rèn)證過(guò)的網(wǎng)站,并執(zhí)行如發(fā)郵件、發(fā)送消息或財(cái)產(chǎn)操作等。CSRF與XSS(跨站腳本)不同,后者是利用站點(diǎn)內(nèi)的信任用戶,而CSRF則是假冒受信任用戶對(duì)受信任網(wǎng)站進(jìn)行請(qǐng)求。
??記住密碼的功能
??開(kāi)啟記住密碼
//定制請(qǐng)求的授權(quán)規(guī)則
@Override
protected void configure(HttpSecurity http) throws Exception {
//。。。。。。。。。。。
//記住我
http.rememberMe();
}??實(shí)現(xiàn)原理
我們可以查看瀏覽器的 cookie

點(diǎn)擊注銷的時(shí)候,可以發(fā)現(xiàn), spring security 幫我們自動(dòng)刪除了這個(gè) cookie

結(jié)論:登錄成功后,將cookie發(fā)送給瀏覽器保存,以后登錄帶上這個(gè)cookie,只要通過(guò)檢查就可以 免登錄了。如果點(diǎn)擊注銷,則會(huì)刪除這個(gè)cookie。
??定制登錄頁(yè)
現(xiàn)在這個(gè)登錄頁(yè)面都是spring security 默認(rèn)的,怎么樣可以使用我們自己寫(xiě)的Login界面
在剛才的登錄頁(yè)配置后面指定 loginpage
http.formLogin().loginPage("/toLogin");配置接收登錄的用戶名和密碼的參數(shù)
http.formLogin()
.usernameParameter("username")
.passwordParameter("password")
.loginPage("/toLogin")
.loginProcessingUrl("/login"); // 登陸表單提交請(qǐng)求到此這篇關(guān)于SpringSecurity 認(rèn)證、注銷、權(quán)限控制和注銷、記住密碼、自定義登入頁(yè)等知識(shí)總結(jié)的文章就介紹到這了,更多相關(guān)SpringSecurity認(rèn)證、注銷、權(quán)限控制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java Spring Security認(rèn)證與授權(quán)及注銷和權(quán)限控制篇綜合解析
- 詳解如何在項(xiàng)目中應(yīng)用SpringSecurity權(quán)限控制
- Spring?Security權(quán)限管理實(shí)現(xiàn)接口動(dòng)態(tài)權(quán)限控制
- SpringBoot如何整合Springsecurity實(shí)現(xiàn)數(shù)據(jù)庫(kù)登錄及權(quán)限控制
- Springboot+Spring Security實(shí)現(xiàn)前后端分離登錄認(rèn)證及權(quán)限控制的示例代碼
- SpringBoot整合Security實(shí)現(xiàn)權(quán)限控制框架(案例詳解)
- 詳解Spring Security 中的四種權(quán)限控制方式
- Spring Security如何使用URL地址進(jìn)行權(quán)限控制
- Vue 動(dòng)態(tài)路由的實(shí)現(xiàn)及 Springsecurity 按鈕級(jí)別的權(quán)限控制
相關(guān)文章
java題解Leetcode 8字符串轉(zhuǎn)換整數(shù)
這篇文章主要為大家介紹了java題解Leetcode 8字符串轉(zhuǎn)換整數(shù)實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Spring?AOP實(shí)現(xiàn)聲明式事務(wù)機(jī)制源碼解析
這篇文章主要為大家介紹了Spring?AOP實(shí)現(xiàn)聲明式事務(wù)機(jī)制源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
springboot動(dòng)態(tài)加載Echarts柱狀圖
這篇文章主要為大家詳細(xì)介紹了springboot動(dòng)態(tài)加載Echarts柱狀圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
Java?ASM使用logback日志級(jí)別動(dòng)態(tài)切換方案展示
這篇文章主要介紹了Java?ASM使用logback日志級(jí)別動(dòng)態(tài)切換方案展示,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
Java實(shí)現(xiàn)簡(jiǎn)單學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
mybatis向數(shù)據(jù)庫(kù)里插入記錄后自動(dòng)返回記錄ID問(wèn)題
本文介紹了在接手項(xiàng)目時(shí),對(duì)一個(gè)業(yè)務(wù)處理邏輯進(jìn)行重構(gòu)和性能優(yōu)化的經(jīng)歷,作者提到,性能問(wèn)題可能是導(dǎo)致bug的一個(gè)重要原因,作者提到,在以前的.NET項(xiàng)目中,插入記錄后系統(tǒng)會(huì)自動(dòng)刷新實(shí)體類,為其中的主鍵ID賦值,而SpringBoot項(xiàng)目mybatis也可以通過(guò)指定主鍵來(lái)優(yōu)化代碼2025-01-01
從匯編碼分析java對(duì)象的創(chuàng)建過(guò)程(推薦)
這篇文章主要介紹了從匯編碼分析java對(duì)象的創(chuàng)建過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03

