Filter过滤器 过滤器过滤原理 多个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;
}
}