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

