1. 程式人生 > 其它 >SpringBoot —— Filter 過濾器\攔截器

SpringBoot —— Filter 過濾器\攔截器

SpringBoot——實現過濾器Filter

1、Filter過濾器

(1) 主要用來過濾使用者請求的,允許我們對使用者的請求進行前置處理和後置處理。面向切面程式設計AOP。

例如:實現URL級別的許可權控制、過濾非法請求等。

(2)Filter是依賴於Servlet容器(Filter介面在Servlet包下),增強版的servlet

(3)自定義Filter

方法一 : 1、實現javax.Servlet.Filter介面

              2、重寫方法

                   init() 初始化

                   doFilter() 對請求進行過濾

                   destroy() 銷燬過濾器後自行的操作,對資源進行回收

             3、建立配置類中註冊自定義的過濾器

方法二:@WebFilter()註解,進行引數配置

               @ServletComponentScan

2、Filter介面如何實現攔截功能

(1)doFilter() 實現對使用者請求的過濾

(2)流程:

       1、使用者傳送請求到web伺服器,請求先到過濾器

       2、過濾器對請求進行一些處理(過濾請求引數、修改返回給客戶端的response內容、判斷是否讓使用者訪問該介面等)

       3、使用者請求完畢

3、定義多個過濾器,決定過濾器執行順序

在配置類中呼叫FilterRegistrationBean.setOrder()方法進行決定。

filterRegistrationBean.setOrder(2); //2 表示在1 執行後再執行

filterRegistrationBean.setOrder(1); //1 表示先執行

@Configuration
public class MyFilterConfig {
   @Autowired
   MyFilter myFilter;
   @Autowired
   MyFilter2 myFilter2;
   
@Bean
public FilterRegistrationBean<MyFilter> setUpMyFilter() {
   FilterRegistrationBean<MyFilter> filterRegistrationBean = new FilterRegistrationBean<>();
   filterRegistrationBean.setOrder(2);
   filterRegistrationBean.setFilter(myFilter);
   filterRegistrationBean.setUrlPatterns(new ArrayList<>(Arrays.asList("/api/*")));

   return filterRegistrationBean;
}

@Bean
public FilterRegistrationBean<MyFilter2> setUpMyFilter2() {
   FilterRegistrationBean<MyFilter2> filterRegistrationBean = new FilterRegistrationBean<>();
   filterRegistrationBean.setOrder(1);
   filterRegistrationBean.setFilter(myFilter2);
   filterRegistrationBean.setUrlPatterns(new ArrayList<>(Arrays.asList("/api/*")));
   return filterRegistrationBean;
}
}