亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

責(zé)任鏈模式在spring security過(guò)濾器鏈中的應(yīng)用小結(jié)

 更新時(shí)間:2024年11月27日 10:30:23   作者:Jack_abu  
責(zé)任鏈模式在SpringSecurity過(guò)濾器鏈中的應(yīng)用,通過(guò)一系列的過(guò)濾器按順序處理請(qǐng)求,每個(gè)過(guò)濾器負(fù)責(zé)特定的安全功能,實(shí)現(xiàn)靈活且可擴(kuò)展的請(qǐng)求處理機(jī)制,感興趣的朋友跟隨小編一起看看吧

責(zé)任鏈模式(Chain of Responsibility Pattern)是一種行為型設(shè)計(jì)模式,它允許多個(gè)對(duì)象按照順序處理請(qǐng)求,并且每個(gè)對(duì)象可以選擇自己是否處理該請(qǐng)求或?qū)⑵鋫鬟f給下一個(gè)對(duì)象。

在Spring Security中,責(zé)任鏈模式得到了廣泛應(yīng)用,特別是在其過(guò)濾器鏈(Filter Chain)機(jī)制中。

一、Spring Security過(guò)濾器鏈概述

Spring Security中的過(guò)濾器鏈?zhǔn)潜Wo(hù)Web應(yīng)用程序的核心組件之一。它是一條由多個(gè)過(guò)濾器組成的序列,這些過(guò)濾器按照特定順序執(zhí)行,用于處理HTTP請(qǐng)求和響應(yīng)。每當(dāng)客戶(hù)端向應(yīng)用程序發(fā)送請(qǐng)求時(shí),請(qǐng)求首先會(huì)經(jīng)過(guò)Spring Security的過(guò)濾器鏈。過(guò)濾器鏈中的過(guò)濾器會(huì)按順序執(zhí)行,每個(gè)過(guò)濾器都有機(jī)會(huì)處理請(qǐng)求和響應(yīng)。如果過(guò)濾器允許請(qǐng)求繼續(xù),則請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到下一個(gè)過(guò)濾器或最終到達(dá)應(yīng)用程序的控制器。

二、責(zé)任鏈模式在過(guò)濾器鏈中的應(yīng)用 

  • 過(guò)濾器鏈的構(gòu)成
    • Spring Security的過(guò)濾器鏈包含多種過(guò)濾器,如:UsernamePasswordAuthenticationFilter(用于處理基于用戶(hù)名和密碼的身份驗(yàn)證)、AbstractAuthenticationProcessingFilter(抽象類(lèi),是大多數(shù)身份驗(yàn)證過(guò)濾器的基類(lèi))、SecurityContextPersistenceFilter(負(fù)責(zé)加載和保存SecurityContext)、RememberMeAuthenticationFilter(處理基于“記住我”功能的身份驗(yàn)證)、CsrfFilter(處理跨站請(qǐng)求偽造保護(hù))以及FilterSecurityInterceptor(執(zhí)行訪(fǎng)問(wèn)決策)等。
  • 責(zé)任鏈模式的實(shí)現(xiàn)
    • 在Spring Security中,每個(gè)過(guò)濾器都實(shí)現(xiàn)了特定的安全功能,并且它們按照配置的順序串聯(lián)在一起,形成了一個(gè)過(guò)濾器鏈。
    • 當(dāng)請(qǐng)求到達(dá)時(shí),它首先被傳遞給鏈中的第一個(gè)過(guò)濾器。該過(guò)濾器會(huì)根據(jù)其邏輯判斷是否需要處理該請(qǐng)求。如果需要,則進(jìn)行處理;如果不需要或處理完成后需要繼續(xù)傳遞,則將該請(qǐng)求傳遞給鏈中的下一個(gè)過(guò)濾器。
    • 這種機(jī)制允許每個(gè)過(guò)濾器專(zhuān)注于自己的安全功能,而無(wú)需關(guān)心其他過(guò)濾器的實(shí)現(xiàn)細(xì)節(jié)。同時(shí),它也提供了更大的靈活性和可擴(kuò)展性,因?yàn)榭梢酝ㄟ^(guò)添加、刪除或重新排序過(guò)濾器來(lái)輕松地修改安全策略。
  • 關(guān)鍵過(guò)濾器的功能
    • UsernamePasswordAuthenticationFilter:用于處理基于用戶(hù)名和密碼的身份驗(yàn)證。它通常處理POST請(qǐng)求到/login端點(diǎn)。
    • SecurityContextPersistenceFilter:負(fù)責(zé)加載和保存SecurityContext。SecurityContext包含當(dāng)前用戶(hù)的安全上下文,如已認(rèn)證的用戶(hù)主體。
    • FilterSecurityInterceptor:執(zhí)行訪(fǎng)問(wèn)決策。它根據(jù)配置的AccessDecisionManagerAccessDecisionVoter來(lái)決定用戶(hù)是否有權(quán)訪(fǎng)問(wèn)某個(gè)資源。

三、自定義過(guò)濾器

在Spring Security中,自定義過(guò)濾器的實(shí)現(xiàn)是責(zé)任鏈模式的一個(gè)典型應(yīng)用。通過(guò)創(chuàng)建并注冊(cè)自定義過(guò)濾器,你可以將特定的安全邏輯插入到過(guò)濾器鏈中,從而在請(qǐng)求處理過(guò)程中執(zhí)行額外的操作。

以下是一個(gè)簡(jiǎn)單的示例,展示如何創(chuàng)建自定義過(guò)濾器并將其集成到Spring Security的過(guò)濾器鏈中。

假設(shè)我們需要?jiǎng)?chuàng)建一個(gè)自定義過(guò)濾器,用于記錄每個(gè)請(qǐng)求的URI和HTTP方法。以下是如何實(shí)現(xiàn)這個(gè)自定義過(guò)濾器并將其添加到Spring Security的過(guò)濾器鏈中的步驟。 

創(chuàng)建自定義過(guò)濾器

首先,你需要?jiǎng)?chuàng)建一個(gè)實(shí)現(xiàn)javax.servlet.Filter接口的類(lèi)。在這個(gè)類(lèi)中,你將覆蓋doFilter方法以執(zhí)行你的自定義邏輯。

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.Filter;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class CustomLoggingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // 初始化邏輯(可選)
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String uri = httpRequest.getRequestURI();
        String method = httpRequest.getMethod();
        // 記錄請(qǐng)求的URI和HTTP方法
        System.out.println("Request URI: " + uri + ", Method: " + method);
        // 將請(qǐng)求傳遞給過(guò)濾器鏈中的下一個(gè)過(guò)濾器
        chain.doFilter(request, response);
    }
    @Override
    public void destroy() {
        // 銷(xiāo)毀邏輯(可選)
    }
}

注冊(cè)自定義過(guò)濾器到Spring Security

接下來(lái),你需要將自定義過(guò)濾器注冊(cè)到Spring Security的過(guò)濾器鏈中。這通常是通過(guò)配置類(lèi)來(lái)實(shí)現(xiàn)的。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .addFilterBefore(customLoggingFilter(), UsernamePasswordAuthenticationFilter.class)
            // 其他安全配置...
            .authorizeRequests()
                .anyRequest().authenticated()
                .and()
            .formLogin() // 如果使用表單登錄,則啟用它
            .and()
            .httpBasic(); // 啟用HTTP Basic(可選)
        return http.build();
    }
    @Bean
    public CustomLoggingFilter customLoggingFilter() {
        return new CustomLoggingFilter();
    }
}

在這個(gè)配置類(lèi)中,我們使用了HttpSecurity來(lái)配置Spring Security。通過(guò)調(diào)用addFilterBefore方法,我們將自定義過(guò)濾器CustomLoggingFilter添加到了UsernamePasswordAuthenticationFilter之前。這意味著在身份驗(yàn)證之前,我們的自定義過(guò)濾器將首先執(zhí)行并記錄請(qǐng)求的URI和HTTP方法。

運(yùn)行應(yīng)用程序

現(xiàn)在,當(dāng)你運(yùn)行應(yīng)用程序并發(fā)送請(qǐng)求時(shí),你應(yīng)該會(huì)在控制臺(tái)中看到自定義過(guò)濾器記錄的請(qǐng)求信息。

在Spring Security中每個(gè)過(guò)濾器(包括自定義過(guò)濾器)都是鏈中的一個(gè)節(jié)點(diǎn),它們按照配置的順序依次執(zhí)行。每個(gè)過(guò)濾器都有機(jī)會(huì)處理請(qǐng)求,并且可以選擇將請(qǐng)求傳遞給鏈中的下一個(gè)過(guò)濾器或執(zhí)行其他操作(如拒絕訪(fǎng)問(wèn)、重定向等)。這種機(jī)制使得Spring Security能夠靈活地處理各種安全需求,同時(shí)保持了代碼的清晰和可維護(hù)性。

到此這篇關(guān)于責(zé)任鏈模式在spring security過(guò)濾器鏈中的應(yīng)用的文章就介紹到這了,更多相關(guān)spring security過(guò)濾器鏈內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • feign遠(yuǎn)程調(diào)用無(wú)法傳遞對(duì)象屬性405的問(wèn)題

    feign遠(yuǎn)程調(diào)用無(wú)法傳遞對(duì)象屬性405的問(wèn)題

    這篇文章主要介紹了feign遠(yuǎn)程調(diào)用無(wú)法傳遞對(duì)象屬性405的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java 封裝的使用詳解

    Java 封裝的使用詳解

    在面向?qū)ο蟪淌皆O(shè)計(jì)方法中,封裝(英語(yǔ):Encapsulation)是指一種將抽象性函式接口的實(shí)現(xiàn)細(xì)節(jié)部分包裝、隱藏起來(lái)的方法。封裝可以被認(rèn)為是一個(gè)保護(hù)屏障,防止該類(lèi)的代碼和數(shù)據(jù)被外部類(lèi)定義的代碼隨機(jī)訪(fǎng)問(wèn)。要訪(fǎng)問(wèn)該類(lèi)的代碼和數(shù)據(jù),必須通過(guò)嚴(yán)格的接口控制
    2021-11-11
  • Spring?BeanFactory容器的構(gòu)建和使用示例詳解

    Spring?BeanFactory容器的構(gòu)建和使用示例詳解

    BeanFactory是Spring框架中的一部分,它提供了IoC(控制反轉(zhuǎn))的實(shí)現(xiàn)機(jī)制,下面小編就來(lái)和大家簡(jiǎn)單聊聊BeanFactory容器的構(gòu)建和使用示例吧
    2023-07-07
  • 詳解如何將已有項(xiàng)目改造為Spring Boot項(xiàng)目

    詳解如何將已有項(xiàng)目改造為Spring Boot項(xiàng)目

    本篇文章主要介紹了如何將已有項(xiàng)目改造為Spring Boot項(xiàng)目,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • @ConfigurationProperties加載外部配置方式

    @ConfigurationProperties加載外部配置方式

    這篇文章主要介紹了@ConfigurationProperties加載外部配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java文件大小轉(zhuǎn)換的兩種方式小結(jié)

    Java文件大小轉(zhuǎn)換的兩種方式小結(jié)

    在程序開(kāi)發(fā)的過(guò)程中,文件的大小在視圖呈現(xiàn)和數(shù)據(jù)庫(kù)存儲(chǔ)的過(guò)程不一致怎么轉(zhuǎn)換呢,本文主要介紹了Java文件大小轉(zhuǎn)換的兩種方式小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • 基于jstl 標(biāo)簽的使用介紹

    基于jstl 標(biāo)簽的使用介紹

    本篇文章小編為大家介紹,基于jstl 標(biāo)簽的使用介紹,需要的朋友參考下
    2013-04-04
  • Java使用lambda表達(dá)式簡(jiǎn)化代碼的示例詳解

    Java使用lambda表達(dá)式簡(jiǎn)化代碼的示例詳解

    這篇文章主要給大家介紹了Java如何使用lambda表達(dá)式簡(jiǎn)化代碼的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-11-11
  • Java三種獲取redis的連接及redis_String類(lèi)型演示(適合新手)

    Java三種獲取redis的連接及redis_String類(lèi)型演示(適合新手)

    這篇文章主要介紹了Java三種獲取redis的連接及redis_String類(lèi)型演示(適合新手),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java設(shè)計(jì)模式之模板方法模式詳解

    Java設(shè)計(jì)模式之模板方法模式詳解

    這篇文章主要為大家詳細(xì)介紹了Java設(shè)計(jì)模式之模板方法模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03

最新評(píng)論