溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Springboot工程中使用filter過程解析

發(fā)布時間:2020-10-26 10:16:43 來源:腳本之家 閱讀:177 作者:程序曉猿 欄目:編程語言

一、什么是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í)有所幫助,也希望大家多多支持億速云。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI