最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot應(yīng)用中使用過濾器的過程詳解

 更新時(shí)間:2023年06月09日 14:36:23   作者:不愛運(yùn)動(dòng)的跑者  
過濾器通常用于實(shí)現(xiàn)跨切面的功能,例如身份驗(yàn)證、日志記錄、請(qǐng)求和響應(yīng)的修改、性能監(jiān)控等,這篇文章主要介紹了springboot應(yīng)用中使用過濾器,需要的朋友可以參考下

java web應(yīng)用中的過濾器是什么

在Java Web應(yīng)用中,過濾器(Filter)是一種用于處理請(qǐng)求和響應(yīng)的組件。過濾器可以在請(qǐng)求到達(dá)Servlet之前攔截請(qǐng)求,并在響應(yīng)返回客戶端之前處理響應(yīng)。過濾器通常用于實(shí)現(xiàn)跨切面的功能,例如身份驗(yàn)證、日志記錄、請(qǐng)求和響應(yīng)的修改、性能監(jiān)控等。過濾器工作在Servlet容器中,可以對(duì)進(jìn)入和離開Servlet的請(qǐng)求和響應(yīng)進(jìn)行攔截和處理。提供了一種可插拔的方式,可以在應(yīng)用的不同組件(如Servlet、JSP)之間共享通用的邏輯和功能。通過在過濾器鏈中串聯(lián)多個(gè)過濾器,可以實(shí)現(xiàn)對(duì)請(qǐng)求和響應(yīng)進(jìn)行多個(gè)階段的處理。過濾器的執(zhí)行順序是根據(jù)其在web.xml文件(或通過注解)中的聲明順序決定的。每個(gè)過濾器都可以決定是否繼續(xù)調(diào)用過濾器鏈中的下一個(gè)過濾器,或者直接將請(qǐng)求傳遞給下一個(gè)組件(如Servlet)。
過濾器通常具有以下方法:
init:在過濾器被實(shí)例化后立即調(diào)用,用于初始化過濾器??梢栽诖朔椒ㄖ蝎@取和設(shè)置配置參數(shù)。
doFilter:對(duì)請(qǐng)求進(jìn)行攔截和處理的核心方法??梢栽诖朔椒ㄖ袌?zhí)行前置處理、修改請(qǐng)求、處理請(qǐng)求、修改響應(yīng)等操作。必須調(diào)用chain.doFilter()方法來繼續(xù)調(diào)用下一個(gè)過濾器或目標(biāo)組件。
destroy:在過濾器被銷毀前調(diào)用,用于釋放資源和執(zhí)行清理操作。

springboot應(yīng)用中定義過濾器

在SpringBoot應(yīng)用中,使用Filter接口來實(shí)現(xiàn)過濾器。下面是一個(gè)簡(jiǎn)單的示例,展示了如何在SpringBoot應(yīng)用中實(shí)現(xiàn)一個(gè)過濾器:
首先,創(chuàng)建一個(gè)實(shí)現(xiàn)Filter接口的類。例如,我們創(chuàng)建一個(gè)名為CustomFilter的類:

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(urlPatterns = "/*")
public class CustomFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // 在請(qǐng)求處理之前執(zhí)行的邏輯
        System.out.println("Before request processing...");
        // 繼續(xù)調(diào)用過濾器鏈
        chain.doFilter(request, response);
        // 在請(qǐng)求處理之后執(zhí)行的邏輯
        System.out.println("After request processing...");
    }
    // 其他方法(如果需要):init()和destroy()
}

在上面的示例中,使用了@WebFilter注解來指定過濾器的URL模式,urlPatterns = "/*"表示過濾器將應(yīng)用于所有的請(qǐng)求。
然后,您需要在應(yīng)用程序的入口類(通常是帶有@SpringBootApplication注解的類)中注冊(cè)過濾器??梢允褂肍ilterRegistrationBean來實(shí)現(xiàn)這一點(diǎn)。例如:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
    @Bean
    public FilterRegistrationBean<CustomFilter> loggingFilter() {
        FilterRegistrationBean<CustomFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new CustomFilter());
        registrationBean.addUrlPatterns("/*");
        return registrationBean;
    }
}

在上面的示例中,我們通過@Bean注解創(chuàng)建了一個(gè)FilterRegistrationBean實(shí)例,并將自定義過濾器CustomFilter設(shè)置為過濾器實(shí)例。然后,我們使用addUrlPatterns()方法指定過濾器應(yīng)用的URL模式。
這樣,當(dāng)您啟動(dòng)Spring Boot應(yīng)用程序時(shí),CustomFilter將會(huì)被注冊(cè),并在每個(gè)匹配URL模式的請(qǐng)求上調(diào)用doFilter()方法。
請(qǐng)注意,以上示例是一種使用注解方式注冊(cè)過濾器的方法。您也可以通過編寫FilterRegistrationBean的配置類來注冊(cè)過濾器。這種方式需要?jiǎng)?chuàng)建一個(gè)實(shí)現(xiàn)FilterRegistrationBean的配置類,并在其中注冊(cè)過濾器。

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean<CustomFilter> loggingFilter() {
        FilterRegistrationBean<CustomFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new CustomFilter());
        registrationBean.addUrlPatterns("/*");
        return registrationBean;
    }
}

以上是使用SpringBoot應(yīng)用中實(shí)現(xiàn)過濾器的基本方法。關(guān)于@WebFilter得詳細(xì)介紹如下:
@WebFilter注解來指定過濾器的URL模式。@WebFilter是Servlet規(guī)范提供的注解之一,可以直接在過濾器類上使用。
@WebFilter注解的常用屬性有:
filterName:過濾器的名稱,可選項(xiàng)。
urlPatterns:過濾器應(yīng)用的URL模式,指定需要過濾的URL路徑模式,如"/*"表示匹配所有請(qǐng)求路徑,可使用多個(gè)模式。
servletNames:過濾器應(yīng)用的Servlet名稱,可選項(xiàng)。
value:與urlPatterns相同的作用,可選項(xiàng)。
dispatcherTypes:過濾器的調(diào)度類型,指定過濾器何時(shí)被調(diào)用,可選項(xiàng),默認(rèn)為DispatcherType.REQUEST,可使用多個(gè)類型。
使用@WebFilter注解的優(yōu)點(diǎn)是它可以直接在過濾器類上聲明,而不需要額外的配置類。當(dāng)應(yīng)用啟動(dòng)時(shí),SpringBoot會(huì)自動(dòng)掃描并注冊(cè)帶有@WebFilter注解的過濾器。
需要注意的是,在使用@WebFilter注解時(shí),確保您的SpringBoot應(yīng)用程序中已啟用了Servlet組件掃描。您可以在入口類上添加 @ServletComponentScan 注解來啟用Servlet組件掃描。
下面是一個(gè)使用@WebFilter注解實(shí)現(xiàn)過濾器的示例:

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(urlPatterns = "/*")
public class CustomFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        // 在請(qǐng)求處理之前執(zhí)行的邏輯
        System.out.println("Before request processing...");
        // 繼續(xù)調(diào)用過濾器鏈
        chain.doFilter(request, response);
        // 在請(qǐng)求處理之后執(zhí)行的邏輯
        System.out.println("After request processing...");
    }
    // 其他方法(如果需要):init()和destroy()
}

使用@WebFilter注解,可以直接在過濾器類上指定過濾器的URL模式,如上述示例中的urlPatterns = "/*"表示過濾器將應(yīng)用于所有請(qǐng)求路徑。
然后,當(dāng)啟動(dòng)Spring Boot應(yīng)用程序時(shí),CustomFilter將自動(dòng)注冊(cè)為一個(gè)過濾器,并在每個(gè)匹配URL模式的請(qǐng)求上調(diào)用doFilter()方法。

在一個(gè)過濾器中如何忽略特定得路徑

要使用@WebFilter注解來忽略某些URL,可以使用@WebFilter注解的dispatcherTypes屬性來指定過濾器的調(diào)度類型。通過將調(diào)度類型設(shè)置為DispatcherType.ERROR,您可以使過濾器忽略錯(cuò)誤請(qǐng)求。
以下是一個(gè)示例,演示如何使用@WebFilter注解忽略某些URL:

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import java.io.IOException;
@WebFilter(urlPatterns = "/*", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.ERROR}, 
    initParams = {
        @WebInitParam(name = "excludedUrls", value = "/exclude-url1;/exclude-url2")
    })
public class CustomFilter implements Filter {
    private String[] excludedUrls;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        String excludedUrlsParam = filterConfig.getInitParameter("excludedUrls");
        if (excludedUrlsParam != null) {
            excludedUrls = excludedUrlsParam.split(";");
        }
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        String requestUrl = request.getServletContext().getRequestURI();
        if (excludedUrls != null) {
            for (String excludedUrl : excludedUrls) {
                if (requestUrl.equals(excludedUrl)) {
                    chain.doFilter(request, response);
                    return;
                }
            }
        }
        // 過濾器邏輯
        // ...
        chain.doFilter(request, response);
    }
    @Override
    public void destroy() {
        // 銷毀邏輯
        // ...
    }
}

在上述示例中,我們使用了dispatcherTypes屬性來指定過濾器的調(diào)度類型為DispatcherType.REQUEST和DispatcherType.ERROR,這樣過濾器將被應(yīng)用于普通請(qǐng)求和錯(cuò)誤請(qǐng)求。
我們還使用了@WebInitParam注解來定義一個(gè)名為excludedUrls的初始化參數(shù),用于指定要忽略的URL。在init()方法中,我們獲取該初始化參數(shù),并將其拆分為一個(gè)字符串?dāng)?shù)組,以便后續(xù)使用。
在doFilter()方法中,我們檢查當(dāng)前請(qǐng)求的URL是否與排除的URL匹配。如果匹配,則直接調(diào)用chain.doFilter(),跳過過濾器的邏輯。否則,執(zhí)行過濾器的邏輯并繼續(xù)調(diào)用過濾器鏈。
請(qǐng)注意,上述示例中的忽略URL是硬編碼在過濾器代碼中的。您可以根據(jù)需要將忽略URL存儲(chǔ)在其他地方,例如配置文件或數(shù)據(jù)庫,并在init()方法中讀取它們。

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

相關(guān)文章

  • java實(shí)現(xiàn)解析json復(fù)雜數(shù)據(jù)的第三種思路詳解

    java實(shí)現(xiàn)解析json復(fù)雜數(shù)據(jù)的第三種思路詳解

    這篇文章主要為大家信息介紹了java實(shí)現(xiàn)解析json復(fù)雜數(shù)據(jù)的第三種思路,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • springboot shardingjdbc與druid數(shù)據(jù)源沖突問題及解決

    springboot shardingjdbc與druid數(shù)據(jù)源沖突問題及解決

    這篇文章主要介紹了springboot shardingjdbc與druid數(shù)據(jù)源沖突問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Spring狀態(tài)機(jī) Statemachine使用小結(jié)

    Spring狀態(tài)機(jī) Statemachine使用小結(jié)

    狀態(tài)機(jī)通過狀態(tài)、事件、配置管理流程,分離業(yè)務(wù)邏輯與狀態(tài)控制,實(shí)現(xiàn)結(jié)構(gòu)化流轉(zhuǎn),本文主要介紹了Spring狀態(tài)機(jī)Statemachine使用小結(jié),感興趣的可以了解一下
    2025-09-09
  • Spring 4 支持的 Java 8 特性

    Spring 4 支持的 Java 8 特性

    Spring 框架 4 支持 Java 8 語言和 API 功能。在本文中,我們將重點(diǎn)放在 Spring 4 支持新的 Java 8 的功能。最重要的是 Lambda 表達(dá)式,方法引用,JSR-310的日期和時(shí)間,和可重復(fù)注釋。下面跟著小編一起來看下吧
    2017-03-03
  • Spring Cloud Gateway重試機(jī)制原理解析

    Spring Cloud Gateway重試機(jī)制原理解析

    這篇文章主要介紹了Spring Cloud Gateway重試機(jī)制原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • MyBatis-plus的五種批量插入方式對(duì)比分析

    MyBatis-plus的五種批量插入方式對(duì)比分析

    本文主要介紹了MyBatis-plus的五種批量插入方式對(duì)比分析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 使用EasyExcel導(dǎo)出excel模板實(shí)現(xiàn)教程

    使用EasyExcel導(dǎo)出excel模板實(shí)現(xiàn)教程

    EasyExcel是Java解析、生成Excel的高效框架,通過重寫POI對(duì)07版Excel的解析,解決了內(nèi)存溢出的問題,使用步驟包括導(dǎo)入依賴、準(zhǔn)備Excel模板、寫入數(shù)據(jù),并提供了基礎(chǔ)寫入、集合寫入和多個(gè)sheet同時(shí)寫入的效果
    2026-03-03
  • Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的長(zhǎng)輪詢的示例代碼

    Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的長(zhǎng)輪詢的示例代碼

    長(zhǎng)輪詢是與服務(wù)器保持即時(shí)通信的最簡(jiǎn)單的方式,它不使用任何特定的協(xié)議,例如 WebSocket ,所以也不依賴于瀏覽器版本等外部條件的兼容性。本文將用Java實(shí)現(xiàn)一個(gè)簡(jiǎn)單的長(zhǎng)輪詢,需要的可以參考一下
    2022-08-08
  • spring schedule配置多任務(wù)動(dòng)態(tài)cron(增刪啟停)

    spring schedule配置多任務(wù)動(dòng)態(tài)cron(增刪啟停)

    這篇文章主要介紹了spring schedule配置多任務(wù)動(dòng)態(tài)cron(增刪啟停),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java中new與clone操作對(duì)象的比較方法舉例

    Java中new與clone操作對(duì)象的比較方法舉例

    這篇文章主要給大家介紹了關(guān)于Java中new與clone操作對(duì)象的比較方法,在java中對(duì)象的誕生是我們開發(fā)人員new出來的,對(duì)象的使用也是我們開發(fā)人員進(jìn)行操作的,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

宁远县| 津南区| 仙桃市| 集贤县| 郯城县| 兴国县| 星子县| 泉州市| 霸州市| 长治县| 汉源县| 河曲县| 略阳县| 读书| 德昌县| 石景山区| 东乌珠穆沁旗| 莆田市| 千阳县| 鹤岗市| 扶绥县| 理塘县| 新和县| 深水埗区| 梓潼县| 新绛县| 秦皇岛市| 蕉岭县| 营口市| 林甸县| 温泉县| 衡水市| 安龙县| 平乐县| 金寨县| 泽州县| 德钦县| 舒兰市| 靖远县| 清水河县| 家居|