SpringBoot快速整合SpringSecurity的詳細(xì)步驟(新手都會(huì)!)
一、什么是SpringSecurity?
Spring Security是一個(gè)基于Spring框架的安全性框架,提供了一組輕量級(jí)的API和工具,用于實(shí)現(xiàn)身份驗(yàn)證、授權(quán)、防止攻擊等常見(jiàn)的安全性功能。它支持各種身份驗(yàn)證方式,例如基本身份驗(yàn)證、表單身份驗(yàn)證、OAuth2.0和OpenID Connect等。Spring Security還提供了許多可配置選項(xiàng),允許開發(fā)人員根據(jù)應(yīng)用程序的需求進(jìn)行定制。Spring Security已經(jīng)成為了Java企業(yè)級(jí)應(yīng)用程序中使用最廣泛的安全框架之一。
二、SpringSecurity的原理
Spring Security的核心原理是基于過(guò)濾器鏈(Filter Chain)來(lái)保護(hù)應(yīng)用程序資源。在這個(gè)過(guò)濾器鏈中,不同的過(guò)濾器負(fù)責(zé)不同的安全功能,例如身份驗(yàn)證、授權(quán)、攻擊防御等。
當(dāng)一個(gè)請(qǐng)求到達(dá)應(yīng)用程序時(shí),它首先會(huì)被最外層的過(guò)濾器攔截。這個(gè)過(guò)濾器將請(qǐng)求傳遞給下一個(gè)過(guò)濾器,并繼續(xù)執(zhí)行一些前置處理(例如日志記錄、跨域請(qǐng)求處理等)。接下來(lái),在過(guò)濾器鏈中的每個(gè)過(guò)濾器都會(huì)進(jìn)行自己的處理,直到請(qǐng)求被最內(nèi)層的過(guò)濾器處理完畢并返回響應(yīng)。
Spring Security通過(guò)配置過(guò)濾器鏈來(lái)保護(hù)應(yīng)用程序資源。每個(gè)過(guò)濾器都有不同的職責(zé),例如:
(1)AuthenticationFilter:身份驗(yàn)證過(guò)濾器,用于對(duì)用戶進(jìn)行身份驗(yàn)證。
(2)AuthorizationFilter:授權(quán)過(guò)濾器,用于檢查用戶是否有權(quán)限訪問(wèn)某個(gè)資源。
(3)CsrfFilter:防止跨站點(diǎn)請(qǐng)求偽造(CSRF)過(guò)濾器,用于防止CSRF攻擊。
(4)ExceptionTranslationFilter:異常轉(zhuǎn)換過(guò)濾器,用于處理安全相關(guān)的異常。
(5)SessionManagementFilter:會(huì)話管理過(guò)濾器,用于管理用戶的會(huì)話。
開發(fā)人員可以基于Spring Security提供的API和工具,定制自己的安全性策略,并將它們添加到過(guò)濾器鏈中。這樣,當(dāng)應(yīng)用程序收到請(qǐng)求時(shí),它就會(huì)遵循這些安全性策略來(lái)保護(hù)應(yīng)用程序資源。
三、SpringBoot整合SpringSecurity
添加依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>
配置Spring Security
# 設(shè)置默認(rèn)用戶 spring.security.user.name=user spring.security.user.password=pass # 關(guān)閉CSRF保護(hù) spring.security.csrf.enabled=false
編寫安全性配置類。編寫一個(gè)安全性配置類來(lái)配置Spring Security。這個(gè)類應(yīng)該擴(kuò)展WebSecurityConfigurerAdapter并覆蓋一些方法來(lái)配置安全性。
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { // 配置用戶信息 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser("user").password("{noop}pass").roles("USER"); } // 配置HTTP請(qǐng)求安全性 @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/public/**").permitAll() // 允許/public/**路徑下的所有請(qǐng)求 .anyRequest().authenticated() // 所有其他請(qǐng)求都需要身份驗(yàn)證 .and() .formLogin() // 啟用表單登錄 .loginPage("/login") // 指定登錄頁(yè)面 .defaultSuccessUrl("/", true) // 登錄成功后重定向到主頁(yè) .permitAll() // 允許所有用戶訪問(wèn)登錄頁(yè)面 .and() .logout() // 啟用注銷 .logoutUrl("/logout") // 注銷URL .logoutSuccessUrl("/login") // 注銷成功后重定向到登錄頁(yè)面 .permitAll(); // 允許所有用戶注銷 } }
在上面的配置中,我們配置了一個(gè)內(nèi)存身份驗(yàn)證(使用用戶名和密碼)和HTTP請(qǐng)求安全性(允許某些路徑下的請(qǐng)求,要求所有其他請(qǐng)求都需要身份驗(yàn)證,并開啟表單登錄和注銷)。
編寫控制器。最后,您需要編寫一個(gè)控制器來(lái)處理登錄和注銷請(qǐng)求。
@Controller public class LoginController { // 處理登錄請(qǐng)求 @GetMapping("/login") public String login() { return "login"; } // 處理注銷請(qǐng)求 @PostMapping("/logout") public String logout() { return "redirect:/login?logout=true"; } }
在上面的代碼中,我們定義了一個(gè)login()方法來(lái)處理登錄頁(yè)面請(qǐng)求,并返回一個(gè)名為login的模板。logout()方法用于處理注銷請(qǐng)求,并重定向到登錄頁(yè)面。
寫html模板。最后,我們需要編寫一個(gè)名為login.html的模板來(lái)呈現(xiàn)登錄頁(yè)面。
<!DOCTYPE html> <html> <head> <title>Login</title> </head> <body> <h1>Login</h1> <form action="/login" method="post"> <div> <label for="username">Username:</label> <input type="text" id="username" name="username" required autofocus /> </div> </form> </body> </html>
總結(jié)
到此這篇關(guān)于SpringBoot快速整合SpringSecurity的詳細(xì)步驟的文章就介紹到這了,更多相關(guān)SpringBoot快速整合SpringSecurity內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot2.0 整合 SpringSecurity 框架實(shí)現(xiàn)用戶權(quán)限安全管理方法
- SpringSecurity整合springBoot、redis實(shí)現(xiàn)登錄互踢功能
- SpringBoot如何整合Springsecurity實(shí)現(xiàn)數(shù)據(jù)庫(kù)登錄及權(quán)限控制
- 詳解SpringBoot+SpringSecurity+jwt整合及初體驗(yàn)
- springboot整合springsecurity與mybatis-plus的簡(jiǎn)單實(shí)現(xiàn)
- SpringBoot整合SpringSecurityOauth2實(shí)現(xiàn)鑒權(quán)動(dòng)態(tài)權(quán)限問(wèn)題
- Springboot詳解整合SpringSecurity實(shí)現(xiàn)全過(guò)程
- SpringBoot與SpringSecurity整合方法附源碼
- Springboot安全框架整合SpringSecurity實(shí)現(xiàn)方式
相關(guān)文章
eclipse怎么引入spring boot項(xiàng)目插件的方法
這篇文章主要介紹了eclipse怎么引入spring boot項(xiàng)目插件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Java中面向?qū)ο蟮闹R(shí)點(diǎn)總結(jié)
Java是一門面向?qū)ο蟮恼Z(yǔ)言。對(duì)象是Java程序中的基本實(shí)體。除了對(duì)象之外Java程序同樣處理基本數(shù)據(jù)。下面這篇文章主要給大家總結(jié)了關(guān)于Java中面向?qū)ο蟮闹R(shí)點(diǎn),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-02-02解決Spring Batch框架job任務(wù)只跑一次的問(wèn)題
這篇文章主要介紹了解決Spring Batch框架job任務(wù)只跑一次的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09使用Spring安全表達(dá)式控制系統(tǒng)功能訪問(wèn)權(quán)限問(wèn)題
從spring security 3.0開始已經(jīng)可以使用spring Expression表達(dá)式來(lái)控制授權(quán),允許在表達(dá)式中使用復(fù)雜的布爾邏輯來(lái)控制訪問(wèn)的權(quán)限。這篇文章主要介紹了使用Spring安全表達(dá)式控制系統(tǒng)功能訪問(wèn)權(quán)限,需要的朋友可以參考下2019-11-11重新啟動(dòng)IDEA時(shí)maven項(xiàng)目SSM框架文件變色所有@注解失效
這篇文章主要介紹了重新啟動(dòng)IDEA時(shí)maven項(xiàng)目SSM框架文件變色所有@注解失效,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Java OpenCV利用KNN算法實(shí)現(xiàn)圖像背景移除
這篇文章主要為大家介紹了Java OpenCV利用K最鄰近(KNN,K-NearestNeighbor)分類算法實(shí)現(xiàn)圖像背景移除的示例代碼,需要的可以參考一下2022-01-01IDEA中用maven連接數(shù)據(jù)庫(kù)的教程
這篇文章主要介紹了IDEA中用maven連接數(shù)據(jù)庫(kù)的教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11Java超詳細(xì)講解設(shè)計(jì)模式中的命令模式
命令模式是將一個(gè)請(qǐng)求封裝為一個(gè)對(duì)象,從而可用不同的請(qǐng)求對(duì)客戶進(jìn)行參數(shù)化,對(duì)請(qǐng)求排隊(duì)或者對(duì)請(qǐng)求做日志記錄,以及可以支持撤銷的操作2022-04-04Java使用Collections.sort對(duì)中文進(jìn)行排序方式
這篇文章主要介紹了Java使用Collections.sort對(duì)中文進(jìn)行排序方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11SpringBoot+Spring?Data?JPA整合H2數(shù)據(jù)庫(kù)的示例代碼
H2數(shù)據(jù)庫(kù)是一個(gè)開源的關(guān)系型數(shù)據(jù)庫(kù),本文重點(diǎn)給大家介紹SpringBoot+Spring?Data?JPA整合H2數(shù)據(jù)庫(kù)的示例代碼,感興趣的朋友跟隨小編一起看看吧2022-02-02