Springboot工程中使用filter過程解析
一、什么是filter
過濾器實際上就是用來對web資源進行攔截,做一些處理后再交給下一個過濾器或servlet處理 通常都是用來攔截request進行處理的,也可以對返回的response進行攔截處理 。
filter可以在請求到達servlet前或者請求完成響應(yīng)后進行后續(xù)的處理。
二、在springboot工程中使用filter
創(chuàng)建一個filter,并使用注解配置該filter的名稱和攔截路徑等屬性
@WebFilter(filterName = "AFilter",urlPatterns = "/*")
public class AFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("AFilter 開始執(zhí)行");
chain.doFilter(req, resp);
System.out.println("AFilter 執(zhí)行完成");
}
public void init(FilterConfig config) throws ServletException {
}
}
上面的代碼在doFilter方法中寫該過濾器的具體執(zhí)行邏輯,chain.doFilter用來把請求交給下一個過濾器或者servlet。
在啟動類上使用注解@ServletComponentScan來掃描自定義的過濾器
@SpringBootApplication
@ServletComponentScan
public class BillAdminApplication {
public static void main(String[] args) {
SpringApplication.run(BillAdminApplication.class,args);
}
}
這樣自定義的過濾器就會被掃描到,就可以起作用。
三、過濾器的執(zhí)行順序
如果項目中配置了多個過濾器,并且使用的是注解配置,請求到來時過濾器名稱字母順序靠前的過濾器會先執(zhí)行;給客戶端返回響應(yīng)時過濾器的執(zhí)行順序和請求時的相反。
四、注意
使用以上這種方式來加載自定義過濾器時,不能自定義過濾器的執(zhí)行順序,只能通過限定類名順序來達到目的。
五、使用FilterRegistrationBean 來注冊過濾器
當(dāng)需要自定義過濾器的執(zhí)行順序時,可以使用FilterRegistrationBean來實現(xiàn)。
先創(chuàng)建一個過濾器,比如上邊的AFilter.java,不再需要注解@WebFilter,
再啟動類或者配置類中注入一個如下的bean
@Bean
public FilterRegistrationBean registrationBean1(){
FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();
filterRegistrationBean.setFilter(new AFilter());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.setOrder(2);
return filterRegistrationBean;
}
使用這種方式,創(chuàng)建一個filterRegistrationBean對象,再設(shè)置其相關(guān)屬性,可以通過order屬性來設(shè)置過濾器的執(zhí)行順序,order值越小表示過濾器的優(yōu)先級越高,會先執(zhí)行。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringMVC中@controllerAdvice注解的詳細解釋
剛接觸SpringMVC應(yīng)該很少會見到這個注解,其實它的作用非常大,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@controllerAdvice注解的相關(guān)資料,需要的朋友可以參考下2022-02-02
SpringBoot多數(shù)據(jù)源配置并通過注解實現(xiàn)動態(tài)切換數(shù)據(jù)源
本文主要介紹了SpringBoot多數(shù)據(jù)源配置并通過注解實現(xiàn)動態(tài)切換數(shù)據(jù)源,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Spring?Boot?配置文件類型properties?格式與yml?格式
這篇文章主要介紹了Spring?Boot?配置文件類型properties?格式與yml?格式,文章圍繞主題展開詳細內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05

