1、自定義過濾器
過濾器類實作 javax.servlet.Filter。然後添加注解 @WebFilter(filterName=“過濾器名稱” urlPatterns=“過濾規則” )
@Order(int) 注解,配合 @WebFilter 注解使用,用于多個過濾器時定義執行順序,值越小越先執行。
2、添加 @ServletComponentScan 注解
在啟動類上加一個注解 @ServletComponentScan(basePackages=“需要掃描的過濾器”)
3、多個過濾器如何指定執行順序?
使用@Order注解來設定過濾器的執行順序,是無效的!
使用@Order注解指定一個int值,越小越先執行。很多部落格文章都是這麼說的,但你真正的試了嗎?真的可以使用這個注解指定順序嗎?答案是否定的。
經過測試,發現 @Order 注解指定 int 值沒有起作用,是無效的。為啥?因為看源碼發現 @WebFilter 修飾的過濾器在加載時,沒有使用 @Order 注解,而是使用的類名來實作自定義Filter順序
是以這種方式下想定義Filter的順序,就必須限定 Filter 的類名,比如剛才那個 Filter 叫 Filter01,假如我們現在新寫了一個 Filter 叫 Filter02,那麼順序就是 Filter01> Filter02。
是以這種方式雖然實作起來簡單,隻需要注解,但自定義順序就必須要限定類名,使用類名達到排序效果了。
4、配置多個過濾器的執行順序
@Configuration
public class FilterConfig{
@Bean
public FilterRegistrationBean Filter01(){
FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();
filterRegistrationBean.setFilter(new Filter01());//設定過濾器名稱
filterRegistrationBean.addUrlPatterns("/*");//配置過濾規則
filterRegistrationBean.setOrder(1); //order的數值越小 則優先級越高
return filterRegistrationBean;
}
@Bean
public FilterRegistrationBean Filter02(){
FilterRegistrationBean filterRegistrationBean=new FilterRegistrationBean();
filterRegistrationBean.setFilter(new Filter02());
filterRegistrationBean.addUrlPatterns("/*");
filterRegistrationBean.setOrder(2);
return filterRegistrationBean;
}
}