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;
}
}