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

springboot應用中使用過濾器的過程詳解

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

java web應用中的過濾器是什么

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

springboot應用中定義過濾器

在SpringBoot應用中,使用Filter接口來實現(xiàn)過濾器。下面是一個簡單的示例,展示了如何在SpringBoot應用中實現(xiàn)一個過濾器:
首先,創(chuàng)建一個實現(xiàn)Filter接口的類。例如,我們創(chuàng)建一個名為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 {
        // 在請求處理之前執(zhí)行的邏輯
        System.out.println("Before request processing...");
        // 繼續(xù)調用過濾器鏈
        chain.doFilter(request, response);
        // 在請求處理之后執(zhí)行的邏輯
        System.out.println("After request processing...");
    }
    // 其他方法(如果需要):init()和destroy()
}

在上面的示例中,使用了@WebFilter注解來指定過濾器的URL模式,urlPatterns = "/*"表示過濾器將應用于所有的請求。
然后,您需要在應用程序的入口類(通常是帶有@SpringBootApplication注解的類)中注冊過濾器。可以使用FilterRegistrationBean來實現(xià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)建了一個FilterRegistrationBean實例,并將自定義過濾器CustomFilter設置為過濾器實例。然后,我們使用addUrlPatterns()方法指定過濾器應用的URL模式。
這樣,當您啟動Spring Boot應用程序時,CustomFilter將會被注冊,并在每個匹配URL模式的請求上調用doFilter()方法。
請注意,以上示例是一種使用注解方式注冊過濾器的方法。您也可以通過編寫FilterRegistrationBean的配置類來注冊過濾器。這種方式需要創(chuàng)建一個實現(xiàn)FilterRegistrationBean的配置類,并在其中注冊過濾器。

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應用中實現(xiàn)過濾器的基本方法。關于@WebFilter得詳細介紹如下:
@WebFilter注解來指定過濾器的URL模式。@WebFilter是Servlet規(guī)范提供的注解之一,可以直接在過濾器類上使用。
@WebFilter注解的常用屬性有:
filterName:過濾器的名稱,可選項。
urlPatterns:過濾器應用的URL模式,指定需要過濾的URL路徑模式,如"/*"表示匹配所有請求路徑,可使用多個模式。
servletNames:過濾器應用的Servlet名稱,可選項。
value:與urlPatterns相同的作用,可選項。
dispatcherTypes:過濾器的調度類型,指定過濾器何時被調用,可選項,默認為DispatcherType.REQUEST,可使用多個類型。
使用@WebFilter注解的優(yōu)點是它可以直接在過濾器類上聲明,而不需要額外的配置類。當應用啟動時,SpringBoot會自動掃描并注冊帶有@WebFilter注解的過濾器。
需要注意的是,在使用@WebFilter注解時,確保您的SpringBoot應用程序中已啟用了Servlet組件掃描。您可以在入口類上添加 @ServletComponentScan 注解來啟用Servlet組件掃描。
下面是一個使用@WebFilter注解實現(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 {
        // 在請求處理之前執(zhí)行的邏輯
        System.out.println("Before request processing...");
        // 繼續(xù)調用過濾器鏈
        chain.doFilter(request, response);
        // 在請求處理之后執(zhí)行的邏輯
        System.out.println("After request processing...");
    }
    // 其他方法(如果需要):init()和destroy()
}

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

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

要使用@WebFilter注解來忽略某些URL,可以使用@WebFilter注解的dispatcherTypes屬性來指定過濾器的調度類型。通過將調度類型設置為DispatcherType.ERROR,您可以使過濾器忽略錯誤請求。
以下是一個示例,演示如何使用@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屬性來指定過濾器的調度類型為DispatcherType.REQUEST和DispatcherType.ERROR,這樣過濾器將被應用于普通請求和錯誤請求。
我們還使用了@WebInitParam注解來定義一個名為excludedUrls的初始化參數,用于指定要忽略的URL。在init()方法中,我們獲取該初始化參數,并將其拆分為一個字符串數組,以便后續(xù)使用。
在doFilter()方法中,我們檢查當前請求的URL是否與排除的URL匹配。如果匹配,則直接調用chain.doFilter(),跳過過濾器的邏輯。否則,執(zhí)行過濾器的邏輯并繼續(xù)調用過濾器鏈。
請注意,上述示例中的忽略URL是硬編碼在過濾器代碼中的。您可以根據需要將忽略URL存儲在其他地方,例如配置文件或數據庫,并在init()方法中讀取它們。

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

相關文章

最新評論