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

淺析SpringBoot中過濾器配置與應(yīng)用場景

 更新時間:2025年05月14日 10:46:56   作者:星辰聊技術(shù)  
過濾器是 Web 三大組件之一,也是項目中常用的工具,這篇文章主要介紹一下過濾器的概念及在 Spring Boot 中的常用使用方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1. 什么是過濾器

過濾器是 Web 三大組件之一,也是項目中常用的工具。本文主要介紹過濾器的概念及在 Spring Boot 中的常用使用方法。

過濾器由 Servlet 提供,基于函數(shù)回調(diào)實現(xiàn)鏈?zhǔn)綄W(wǎng)絡(luò)請求和響應(yīng)的攔截與修改。由于基于 Servlet,幾乎可以攔截 Web 服務(wù)器管理的所有資源(JSP、圖片文件、HTML 文件、CSS 文件等)。

定義過濾器需要實現(xiàn)javax.servlet.Filter接口。過濾器不是 Servlet,無法直接生成對客戶端的響應(yīng),只能攔截已有請求并預(yù)處理不需要或不一致的信息資源。

2. 過濾器流程原理

在 Web 應(yīng)用中,可以開發(fā)編寫多個過濾器,這些過濾器組合稱為過濾器鏈。用戶發(fā)起請求后,請求信息會按過濾器鏈中過濾器的順序依次進入每個過濾器。經(jīng)過每層過濾器時,需通過過濾器的校驗邏輯并放行才能進入下一層過濾器,直至服務(wù)器獲取資源。

服務(wù)器成功獲取資源并響應(yīng)過濾器后,會按反向順序經(jīng)過層層過濾器,最終響應(yīng)用戶。

3. 過濾器分類

Servlet 2.5:

  • REQUEST: 用戶直接訪問頁面時,WEB 容器會調(diào)用過濾器鏈。
  • FORWARD: 通過 RequestDispatcher 的 forward 訪問目標(biāo)資源時調(diào)用此過濾器。
  • INCLUDE: 通過 RequestDispatcher 的 include 方法調(diào)用目標(biāo)資源時調(diào)用。
  • ERROR: 通過聲明式異常處理機制調(diào)用目標(biāo)資源時調(diào)用過濾器鏈。

Servlet 3.0:

ASYNC: 支持異步處理。

4. 過濾器中需要實現(xiàn)的方法

public void doFilter(ServletRequest, ServletResponse, FilterChain): 實現(xiàn)實際過濾操作。當(dāng)客戶端請求方法與過濾器設(shè)置的 URL 匹配時,Servlet 容器會先調(diào)用過濾器的 doFilter 方法。FilterChain 用于訪問后續(xù)過濾器。

public void init(FilterConfig filterConfig): Web 應(yīng)用啟動時,Web 服務(wù)器創(chuàng)建過濾器實例對象并調(diào)用其 init 方法完成對象初始化(過濾器對象僅創(chuàng)建一次,init 方法僅執(zhí)行一次)。開發(fā)者可通過 init 方法參數(shù)執(zhí)行讀取配置文件等初始化操作。

public void destroy(): Servlet 容器銷毀過濾器實例前調(diào)用此方法。用于釋放過濾器占用的資源。

5. 創(chuàng)建過濾器的兩種方式

方法一:注解方式

創(chuàng)建步驟:

實現(xiàn)Filter接口,添加@WebFilter@Order注解配置過濾器:

@Order(1)
@WebFilter(filterName = "myFilter", urlPatterns = {"*"})
public class MyCustomFilter1 implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) {}

    @Override
    public void destroy() {}
}

在啟動類添加@ServletComponentScan注解:

@SpringBootApplication
@ServletComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

方法二:將過濾器注冊為 Bean

創(chuàng)建步驟:

創(chuàng)建實現(xiàn) Filter 接口的過濾器類:

public class MyCustomFilter2 implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain){}

    @Override
    public void destroy() {}
}

創(chuàng)建過濾器配置類,注冊過濾器:

@Configuration
public class FilterConfig {

    @Bean
    public FilterRegistrationBean customFilter(){
        FilterRegistrationBean<MyCustomFilter1> filterBean = new FilterRegistrationBean<>();
        filterBean.setFilter(new MyCustomFilter1());
        filterBean.setName("FilterController");
        filterBean.addUrlPatterns("/*");
        return filterBean;
    }
}

6. 注解方式的參數(shù)說明與使用示例

(1)參數(shù)說明

@WebFilter可配置多個參數(shù),部分參數(shù)說明如下:

參數(shù)名稱參數(shù)類型參數(shù)描述
filterNameString過濾器的名稱
displayNameString要顯示的過濾器名稱
asyncSupportedboolean設(shè)置過濾器是否支持異步模式
initParamsWebInitParam[]你可以在初始化時配置一些參數(shù)
servletNamesString[]設(shè)置要過濾的 Servlets
urlPatternsString[]指定要攔截的路徑
valueString[]urlPatterns 屬性與 urlPatterns 屬性的作用相同,兩者都指定要攔截的路徑
dispatcherTypesDispatcherType[]設(shè)置過濾器過濾的請求類型,支持以下屬性:ASYNC, ERROR, FORWARD, INCLUDE, REQUEST(默認(rèn)情況下,它過濾所有類型的請求)

(2)使用示例

創(chuàng)建 Controller 類

@RestController
publicclass TestController {

    @GetMapping("/a/hello")
    public String hello1(){
        return"hello world! a";
    }

    @GetMapping("/b/hello")
    public String hello2(){
        return"hello world! b";
    }

    @GetMapping("/c/hello")
    public String hello3(){
        return"hello world! c";
    }
}

創(chuàng)建過濾器類

@Order(1)
@WebFilter(filterName = "myFilter", urlPatterns = {"/a/*", "/b/*"}, description = "自定義過濾器")
publicclass MyCustomFilter2 implements Filter {

    @Override
    public void init(FilterConfig filterConfig) {
        System.out.println("過濾器初始化");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
        throws IOException, ServletException {
        System.out.println("請求處理前...");
        chain.doFilter(request, response);  // 放行請求
        System.out.println("請求處理后...");
    }

    @Override
    public void destroy() {
        System.err.println("過濾器銷毀");
    }
}

創(chuàng)建啟動類

@SpringBootApplication
@ServletComponentScan
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

7. 過濾器注冊 Bean 方式的參數(shù)說明與使用示例

(1)方法參數(shù)說明

方法名稱方法描述
setName()設(shè)置過濾器的名稱。
setFilter()設(shè)置要注冊的過濾器。
setOrder()設(shè)置過濾器的順序位置。
setAsyncSupported()設(shè)置過濾器是否支持異步模式。
addUrlPatterns()添加攔截的路徑。
setUrlPatterns()設(shè)置攔截的路徑。
addServletNames()添加過濾器的 servlet 名稱。
setServletNames()設(shè)置注冊過濾器的 servlet 名稱。
setInitParameters()設(shè)置初始化參數(shù)。
addInitParameter()添加初始化參數(shù)。
setMatchAfter()設(shè)置是否在 Servlet 上下文中聲明的任何過濾器映射之后匹配過濾器映射。
setDispatcherTypes()設(shè)置過濾器過濾的請求類型。支持的屬性如下:ASYNC, ERROR, FORWARD, INCLUDE, REQUEST(默認(rèn)情況下,它過濾所有類型的請求)。

(2)使用示例

創(chuàng)建 Controller 類

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
publicclass TestController {

    @GetMapping("/a/hello")
    public String hello1(){
        return"hello world! a";
    }

    @GetMapping("/b/hello")
    public String hello2(){
        return"hello world! b";
    }

    @GetMapping("/c/hello")
    public String hello3(){
        return"hello world! c";
    }

}

創(chuàng)建過濾器類

public class MyCustomFilter1 implements Filter {

    @Override
    public void init(FilterConfig filterConfig) {
        System.out.println("過濾器初始化");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
        throws IOException, ServletException {
        System.out.println("請求處理前...");
        chain.doFilter(request, response);  // 放行請求
        System.out.println("請求處理后...");
    }

    @Override
    public void destroy() {
        System.err.println("過濾器銷毀");
    }
}

創(chuàng)建過濾器配置類

@Configuration
public class FilterConfig {

    @Bean
    public FilterRegistrationBean customFilter(){
        FilterRegistrationBean<MyCustomFilter1> filterBean = new FilterRegistrationBean<>();
        filterBean.setFilter(new MyCustomFilter1());
        filterBean.setName("FilterController");
        filterBean.addUrlPatterns("/c/*","/b/*");
        return filterBean;
    }
}

創(chuàng)建啟動類

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

8. 過濾器使用場景

(1)日志記錄

過濾器可記錄請求和響應(yīng)的關(guān)鍵信息,便于排查問題和分析系統(tǒng)運行狀態(tài)。例如記錄請求 URL、參數(shù)、響應(yīng)狀態(tài)碼等。

(2)數(shù)據(jù)統(tǒng)計

用于采集各類數(shù)據(jù)指標(biāo),如統(tǒng)計請求次數(shù)、響應(yīng)時間分布等,為系統(tǒng)優(yōu)化提供依據(jù)。

(3)數(shù)據(jù)格式轉(zhuǎn)換

不同系統(tǒng)交互時,過濾器可轉(zhuǎn)換數(shù)據(jù)格式,例如將 JSON 轉(zhuǎn)為 XML。

(4)為數(shù)據(jù)設(shè)置默認(rèn)值

檢查輸入數(shù)據(jù),為缺失字段設(shè)置默認(rèn)值,保證數(shù)據(jù)完整性。

(5)權(quán)限認(rèn)證、黑白名單

實現(xiàn)用戶權(quán)限認(rèn)證和訪問控制,限制特定 IP 或用戶的訪問。

(6)數(shù)據(jù)加解密、簽名驗證

對敏感數(shù)據(jù)加解密以保證安全,同時進行簽名驗證確保數(shù)據(jù)完整性。

到此這篇關(guān)于淺析SpringBoot中過濾器配置與應(yīng)用場景的文章就介紹到這了,更多相關(guān)SpringBoot過濾器配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用Mybatis對數(shù)據(jù)庫進行單表操作的實現(xiàn)示例

    使用Mybatis對數(shù)據(jù)庫進行單表操作的實現(xiàn)示例

    這篇文章主要介紹了使用Mybatis對數(shù)據(jù)庫進行單表操作的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Intellij IDEA如何自定義注釋模板的實現(xiàn)方法

    Intellij IDEA如何自定義注釋模板的實現(xiàn)方法

    這篇文章主要介紹了Intellij IDEA如何自定義注釋模板的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • java中快速創(chuàng)建帶初始值的List和Map實例

    java中快速創(chuàng)建帶初始值的List和Map實例

    下面小編就為大家?guī)硪黄猨ava中快速創(chuàng)建帶初始值的List和Map實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • spring基礎(chǔ)概念A(yù)OP與動態(tài)代理理解

    spring基礎(chǔ)概念A(yù)OP與動態(tài)代理理解

    這篇文章主要為大家詳細(xì)介紹了spring基礎(chǔ)概念A(yù)OP與動態(tài)代理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • SpringBoot整合Redis使用注解進行緩存方式

    SpringBoot整合Redis使用注解進行緩存方式

    文章介紹了使用Redis進行數(shù)據(jù)緩存的幾種方式,包括手動配置RedisTemplate、使用Spring的Caching模塊以及配置自定義的RedisCacheManager
    2025-03-03
  • Intellij?IDEA根據(jù)maven依賴名查找它是哪個pom.xml引入的(圖文詳解)

    Intellij?IDEA根據(jù)maven依賴名查找它是哪個pom.xml引入的(圖文詳解)

    這篇文章主要介紹了Intellij?IDEA根據(jù)maven依賴名查找它是哪個pom.xml引入的,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Spring中的HandlerMapping執(zhí)行流程詳解

    Spring中的HandlerMapping執(zhí)行流程詳解

    這篇文章主要介紹了Spring中的HandlerMapping執(zhí)行流程詳解,HandlerMapping在Spring MVC框架的jar包下面,他是處理映射器,為用戶發(fā)送的請求找到合適的Handler Adapter,它將會把請求映射為HandlerExecutionChain對象,需要的朋友可以參考下
    2023-08-08
  • Spring Boot中集成各種日志框架Logback、Log4j2和Java Util Logging的步驟和示例代碼

    Spring Boot中集成各種日志框架Logback、Log4j2和Java Util 

    這篇文章主要介紹了Spring Boot中集成各種日志框架Logback、Log4j2和Java Util Logging,通過實例代碼介紹了集成Logback、Log4j2和Java Util Logging的基本步驟,你可以根據(jù)自己的需求進行配置和擴展,以滿足更復(fù)雜的日志需求,需要的朋友可以參考下
    2023-11-11
  • javaSE,javaEE,javaME的區(qū)別小結(jié)

    javaSE,javaEE,javaME的區(qū)別小結(jié)

    本篇文章小編就為大家簡單說說JavaSE、JavaEE、JavaME三者之間的區(qū)別,需要的朋友可以過來參考下,感興趣的小伙伴們可以參考一下
    2023-08-08
  • 詳解JAVA 強引用

    詳解JAVA 強引用

    這篇文章主要介紹了JAVA 強引用的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08

最新評論