在springboot工程中使用filter

在springboot工程中使用filter

1、什麼是filter

過濾器實際上就是用來對web資源進行攔截,作一些處理後再交給下一個過濾器或servlet處理 一般都是用來攔截request進行處理的,也能夠對返回的response進行攔截處理 。java

filter能夠在請求到達servlet前或者請求完成響應後進行後續的處理。web

2、在springboot工程中使用filter

  1. 建立一個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 開始執行");
        chain.doFilter(req, resp);
        System.out.println("AFilter 執行完成");
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

上面的代碼在doFilter方法中寫該過濾器的具體執行邏輯,chain.doFilter用來把請求交給下一個過濾器或者servlet。spring

  1. 在啓動類上使用註解@ServletComponentScan來掃描自定義的過濾器
@SpringBootApplication
@ServletComponentScan
public class BillAdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(BillAdminApplication.class,args);
    }
}

這樣自定義的過濾器就會被掃描到,就能夠起做用。springboot

3、過濾器的執行順序

若是項目中配置了多個過濾器,而且使用的是註解配置,請求到來時過濾器名稱字母順序靠前的過濾器會先執行;給客戶端返回響應時過濾器的執行順序和請求時的相反。url

4、注意

使用以上這種方式來加載自定義過濾器時,不能自定義過濾器的執行順序,只能經過限定類名順序來達到目的。code

5、使用FilterRegistrationBean 來註冊過濾器

當須要自定義過濾器的執行順序時,可使用FilterRegistrationBean來實現。對象

先建立一個過濾器,好比上邊的AFilter.java,再也不須要註解@WebFilter,資源

再啓動類或者配置類中注入一個以下的beanservlet

@Bean
    public FilterRegistrationBean registrationBean1(){
        FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new AFilter());
        filterRegistrationBean.addUrlPatterns("/*");
        filterRegistrationBean.setOrder(2);
        return filterRegistrationBean;
    }

使用這種方式,建立一個filterRegistrationBean對象,再設置其相關屬性,能夠經過order屬性來設置過濾器的執行順序,order值越小表示過濾器的優先級越高,會先執行。it

相關文章
相關標籤/搜索