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