欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springSecurity過(guò)濾web請(qǐng)求的項(xiàng)目實(shí)踐

 更新時(shí)間:2025年09月09日 09:54:10   投稿:zx  
SpringSecurity是一個(gè)功能強(qiáng)大的安全框架,提供了全面的 Web 安全功能,它的核心之一是過(guò)濾器鏈,用于攔截和處理 Web 請(qǐng)求,本文就來(lái)介紹SpringSecurity配置和使用過(guò)濾器來(lái)管理Web請(qǐng)求的安全性,感興趣的可以了解一下

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ù)等。

  1. 核心過(guò)濾器

    • SecurityContextPersistenceFilter:從存儲(chǔ)中加載 SecurityContext 到 SecurityContextHolder
    • UsernamePasswordAuthenticationFilter:處理基于表單登錄的身份驗(yàn)證。
    • BasicAuthenticationFilter:處理 HTTP Basic 驗(yàn)證。
    • ExceptionTranslationFilter:處理安全異常,如訪問被拒絕和身份驗(yàn)證失敗。
    • FilterSecurityInterceptor:執(zhí)行訪問決策。

二、配置 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() // 允許所有用戶訪問 /public 路徑
                .antMatchers("/admin/**").hasRole("ADMIN") // 僅允許具有 ADMIN 角色的用戶訪問 /admin 路徑
                .anyRequest().authenticated() // 其他請(qǐng)求需要認(rèn)證
                .and()
            .formLogin()
                .loginPage("/login") // 自定義登錄頁(yè)面
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }
}
?

三、常見的過(guò)濾器配置

  1. 身份驗(yàn)證

    • 通過(guò) UsernamePasswordAuthenticationFilter 實(shí)現(xiàn)表單登錄身份驗(yàn)證。
    • 通過(guò) BasicAuthenticationFilter 實(shí)現(xiàn) HTTP Basic 驗(yàn)證。
  2. 授權(quán)

    • 通過(guò) FilterSecurityInterceptor 配置 URL 級(jí)別的訪問控制。
    • 使用 @PreAuthorize 和 @Secured 注解進(jìn)行方法級(jí)別的訪問控制。
  3. 會(huì)話管理

    • 通過(guò) SessionManagementFilter 管理會(huì)話策略,如會(huì)話并發(fā)控制和會(huì)話固定攻擊防護(hù)。
  4. 跨站點(diǎn)請(qǐng)求偽造(CSRF)保護(hù)

    • 默認(rèn)情況下啟用,通過(guò) CsrfFilter 實(shí)現(xiàn)??梢酝ㄟ^(guò) http.csrf().disable() 禁用 CSRF 保護(hù)。

四、示例代碼解析

下面是一個(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í)別的訪問控制。/home 和 / 路徑允許所有用戶訪問,/admin/** 路徑僅允許 ADMIN 角色訪問,其他路徑需要認(rèn)證。
  • formLogin:配置基于表單的登錄,指定自定義登錄頁(yè)面。
  • logout:配置登出功能,允許所有用戶訪問。
  • 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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中數(shù)組的定義及使用方法(推薦)

    java中數(shù)組的定義及使用方法(推薦)

    下面小編就為大家?guī)?lái)一篇java中數(shù)組的定義及使用方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • SpringBoot生成和操作PDF的代碼詳解

    SpringBoot生成和操作PDF的代碼詳解

    本文主要介紹了在SpringBoot項(xiàng)目下,通過(guò)代碼和操作步驟,詳細(xì)的介紹了如何操作PDF,希望可以幫助到準(zhǔn)備通過(guò)JAVA操作PDF的你,項(xiàng)目框架用的SpringBoot,但在JAVA中代碼都是通用的,需要的朋友可以參考下
    2025-01-01
  • SpringBoot集成Redis之配置、序列化與持久化方式

    SpringBoot集成Redis之配置、序列化與持久化方式

    本文介紹了Redis的基本概念、常用數(shù)據(jù)類型及操作、SpringBoot整合Redis的方法、高級(jí)特性與安全性、性能優(yōu)化、測(cè)試與部署、數(shù)據(jù)一致性及版本更新等內(nèi)容,通過(guò)本文的學(xué)習(xí),讀者可以掌握Redis的使用方法,并在實(shí)際項(xiàng)目中發(fā)揮其優(yōu)勢(shì)
    2024-11-11
  • Java本地部署jenkins持續(xù)集成的實(shí)現(xiàn)

    Java本地部署jenkins持續(xù)集成的實(shí)現(xiàn)

    本文主要介紹了Java本地部署jenkins持續(xù)集成的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • 深入探究Java線程的創(chuàng)建與構(gòu)造方法

    深入探究Java線程的創(chuàng)建與構(gòu)造方法

    這篇文章主要給大家分享的是java線程的創(chuàng)建以及構(gòu)造方法,想了解具體方式的小伙伴可以參考下面文章內(nèi)容,希望對(duì)你有所幫助
    2022-04-04
  • Java 創(chuàng)建兩個(gè)線程模擬對(duì)話并交替輸出實(shí)現(xiàn)解析

    Java 創(chuàng)建兩個(gè)線程模擬對(duì)話并交替輸出實(shí)現(xiàn)解析

    這篇文章主要介紹了Java 創(chuàng)建兩個(gè)線程模擬對(duì)話并交替輸出實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java使用Instant時(shí)輸出的時(shí)間比預(yù)期少了八個(gè)小時(shí)

    Java使用Instant時(shí)輸出的時(shí)間比預(yù)期少了八個(gè)小時(shí)

    在Java中,LocalDateTime表示沒有時(shí)區(qū)信息的日期和時(shí)間,而Instant表示基于UTC的時(shí)間點(diǎn),本文主要介紹了Java使用Instant時(shí)輸出的時(shí)間比預(yù)期少了八個(gè)小時(shí)的問題解決,感興趣的可以了解一下
    2024-09-09
  • java多線程讀取多個(gè)文件的方法

    java多線程讀取多個(gè)文件的方法

    這篇文章主要為大家詳細(xì)介紹了java多線程讀取多個(gè)文件的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Java的基礎(chǔ)語(yǔ)法學(xué)習(xí)筆記

    Java的基礎(chǔ)語(yǔ)法學(xué)習(xí)筆記

    這里為大家整理了Java的基礎(chǔ)語(yǔ)法學(xué)習(xí)筆記,包括關(guān)鍵詞、運(yùn)算符與基本的流程控制語(yǔ)句寫法等,需要的朋友可以參考下
    2016-05-05
  • 使用Spring動(dòng)態(tài)修改bean屬性的key

    使用Spring動(dòng)態(tài)修改bean屬性的key

    這篇文章主要介紹了使用Spring動(dòng)態(tài)修改bean屬性的key方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評(píng)論