springSecurity過(guò)濾web請(qǐng)求的項(xiàng)目實(shí)踐
Spring Security 是一個(gè)功能強(qiáng)大的安全框架,提供了全面的 Web 安全功能。它的核心之一是過(guò)濾器鏈,用于攔截和處理 Web 請(qǐng)求。本文將詳細(xì)介紹如何在 Spring Security 中配置和使用過(guò)濾器來(lái)管理 Web 請(qǐng)求的安全性。
一、Spring Security 過(guò)濾器鏈
Spring Security 使用過(guò)濾器鏈來(lái)處理所有進(jìn)入應(yīng)用程序的 HTTP 請(qǐng)求。這些過(guò)濾器按順序執(zhí)行,每個(gè)過(guò)濾器負(fù)責(zé)特定的安全功能,如身份驗(yàn)證、授權(quán)、會(huì)話管理、跨站點(diǎn)請(qǐng)求偽造(CSRF)保護(hù)等。
核心過(guò)濾器:
SecurityContextPersistenceFilter:從存儲(chǔ)中加載SecurityContext到SecurityContextHolder。UsernamePasswordAuthenticationFilter:處理基于表單登錄的身份驗(yàn)證。BasicAuthenticationFilter:處理 HTTP Basic 驗(yàn)證。ExceptionTranslationFilter:處理安全異常,如訪問(wèn)被拒絕和身份驗(yàn)證失敗。FilterSecurityInterceptor:執(zhí)行訪問(wèn)決策。
二、配置 Spring Security 過(guò)濾器鏈
要配置 Spring Security 的過(guò)濾器鏈,可以通過(guò)擴(kuò)展 WebSecurityConfigurerAdapter 類并重寫 configure 方法來(lái)實(shí)現(xiàn)。以下是一個(gè)示例配置:
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable() // 禁用 CSRF 保護(hù)
.authorizeRequests()
.antMatchers("/public/**").permitAll() // 允許所有用戶訪問(wèn) /public 路徑
.antMatchers("/admin/**").hasRole("ADMIN") // 僅允許具有 ADMIN 角色的用戶訪問(wèn) /admin 路徑
.anyRequest().authenticated() // 其他請(qǐng)求需要認(rèn)證
.and()
.formLogin()
.loginPage("/login") // 自定義登錄頁(yè)面
.permitAll()
.and()
.logout()
.permitAll();
}
}
?三、常見(jiàn)的過(guò)濾器配置
身份驗(yàn)證:
- 通過(guò)
UsernamePasswordAuthenticationFilter實(shí)現(xiàn)表單登錄身份驗(yàn)證。 - 通過(guò)
BasicAuthenticationFilter實(shí)現(xiàn) HTTP Basic 驗(yàn)證。
- 通過(guò)
授權(quán):
- 通過(guò)
FilterSecurityInterceptor配置 URL 級(jí)別的訪問(wèn)控制。 - 使用
@PreAuthorize和@Secured注解進(jìn)行方法級(jí)別的訪問(wèn)控制。
- 通過(guò)
會(huì)話管理:
- 通過(guò)
SessionManagementFilter管理會(huì)話策略,如會(huì)話并發(fā)控制和會(huì)話固定攻擊防護(hù)。
- 通過(guò)
跨站點(diǎn)請(qǐng)求偽造(CSRF)保護(hù):
- 默認(rèn)情況下啟用,通過(guò)
CsrfFilter實(shí)現(xiàn)??梢酝ㄟ^(guò)http.csrf().disable()禁用 CSRF 保護(hù)。
- 默認(rèn)情況下啟用,通過(guò)
四、示例代碼解析
下面是一個(gè)完整的示例,展示了如何配置 Spring Security 來(lái)管理 Web 請(qǐng)求的安全性:
配置類:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/user/**").hasAnyRole("USER", "ADMIN")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password(passwordEncoder().encode("password")).roles("USER")
.and()
.withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN");
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
?說(shuō)明:
authorizeRequests:配置 URL 級(jí)別的訪問(wèn)控制。/home和/路徑允許所有用戶訪問(wèn),/admin/**路徑僅允許 ADMIN 角色訪問(wèn),其他路徑需要認(rèn)證。formLogin:配置基于表單的登錄,指定自定義登錄頁(yè)面。logout:配置登出功能,允許所有用戶訪問(wèn)。configure(AuthenticationManagerBuilder auth):配置內(nèi)存中的用戶存儲(chǔ),定義兩個(gè)用戶:user 和 admin。
到此這篇關(guān)于springSecurity過(guò)濾web請(qǐng)求的項(xiàng)目實(shí)踐的文章就介紹到這了,更多相關(guān)springSecurity過(guò)濾web請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringSecurity的安全過(guò)濾器鏈功能詳解
- SpringSecurity中內(nèi)置過(guò)濾器的使用小結(jié)
- springSecurity自定義登錄接口和JWT認(rèn)證過(guò)濾器的流程
- SpringSecurity中的Filter Chain(過(guò)濾器鏈)
- idea如何debug看springsecurity的過(guò)濾器順序
- SpringSecurity request過(guò)濾問(wèn)題示例小結(jié)
- SpringSecurity定義多個(gè)過(guò)濾器鏈的操作代碼
- springSecurity之如何添加自定義過(guò)濾器
- SpringSecurity學(xué)習(xí)之自定義過(guò)濾器的實(shí)現(xiàn)代碼
相關(guān)文章
Spring Boot使用Servlet及Filter過(guò)程詳解
這篇文章主要介紹了Spring Boot使用Servlet及Filter過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Eclipse 使用Maven構(gòu)建SpringMVC項(xiàng)目
本文主要介紹在Eclipse下創(chuàng)建Maven項(xiàng)目構(gòu)建SpringMVC框架的過(guò)程,講解的比較詳細(xì),需要的朋友可以參考下。2016-06-06
Java實(shí)現(xiàn)PDF導(dǎo)出功能的示例代碼
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)PDF導(dǎo)出功能的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下2023-09-09
SpringBoot3使用?自定義注解+Jackson實(shí)現(xiàn)接口數(shù)據(jù)脫敏的步驟
本文介紹了一種以優(yōu)雅的方式實(shí)現(xiàn)對(duì)接口返回的敏感數(shù)據(jù),如手機(jī)號(hào)、郵箱、身份證等信息的脫敏處理,這種方法也是企業(yè)常用方法,話不多說(shuō)我們一起來(lái)看一下吧2024-03-03
spring-boot2.7.8添加swagger的案例詳解
這篇文章主要介紹了spring-boot2.7.8添加swagger的案例詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01
java隨機(jī)數(shù)生成具體實(shí)現(xiàn)代碼
這篇文章主要為大家分享了java隨機(jī)數(shù)生成具體實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-04-04
SpringBoot實(shí)現(xiàn)ORM操作MySQL的幾種方法
本文主要介紹了SpringBoot實(shí)現(xiàn)ORM操作MySQL的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

