弹簧引导过滤器FilterRegistrationBean实现方式

  

有2种方式可以实现过滤器

  

1:通过FilterRegistrationBean实例注册

  

2:通过@WebFilter注解生效

  

这里选择第一种,因为第二种不能设置过滤器之间的优先级

  

为了演示优先级,这里创建2个测试过滤器类:Test1Filter, Test2Filter

  

通过实现javax.servlet。doFilter (ServletRequest过滤器接口,覆盖其arg0, ServletResponse __arg1、FilterChain最长)方法,决定拦截或放行

        公共类Test1Filter实现滤波器{      @Override   doFilter (ServletRequest arg0,公共空间ServletResponse __arg1、FilterChain最长)   抛出IOException ServletException {//TODO自动生成方法存根   HttpServletRequest请求=(HttpServletRequest arg0);   System.out.println(“自定义过滤器filter1触发,拦截url:”+ request.getRequestURI ());   arg2.doFilter (arg0, __arg1);   }      }
           公共类Test2Filter实现滤波器{   @Override   doFilter (ServletRequest arg0,公共空间ServletResponse __arg1、FilterChain最长)   抛出IOException ServletException {//TODO自动生成方法存根   HttpServletRequest请求=(HttpServletRequest arg0);   System.out.println(“自定义过滤器filter2触发,拦截url:”+ request.getRequestURI ());   arg2.doFilter (arg0, __arg1);   }      }      

通过在springboot的配置中配置不同的FilterRegistrationBean实例,来注册自定义过滤器

  

这里创建一个配置类

        进口org.springframework.boot.web.servlet.FilterRegistrationBean;   进口org.springframework.context.annotation.Bean;   进口org.springframework.context.annotation.Configuration;      进口com.example.demo.filter.Test1Filter;   进口com.example.demo.filter.Test2Filter;      @ configuration   公开课DemoConfiguration {      @ bean   公共FilterRegistrationBeanRegistTest1 () {//通过FilterRegistrationBean实例设置优先级可以生效//通过@WebFilter无效   FilterRegistrationBeanbean=new FilterRegistrationBean ();   bean。setFilter(新Test1Filter());//注册自定义过滤器   bean.setName (flilter1 ");//过滤器名称   bean.addUrlPatterns("/* ");//过滤所有路径   bean.setOrder(1);//优先级,最顶级   返回bean;   }   @ bean   公共FilterRegistrationBeanRegistTest2 () {//通过FilterRegistrationBean实例设置优先级可以生效//通过@WebFilter无效   FilterRegistrationBeanbean=new FilterRegistrationBean ();   bean。setFilter(新Test2Filter());//注册自定义过滤器   bean.setName (flilter2 ");//过滤器名称   bean.addUrlPatterns("/测试/* ");//过滤所有路径   bean.setOrder(6);//优先级,越低越优先   返回bean;   }   }      

其中   

1第一个bean拦截所有路径,而第二个只拦截/测试/*路径

  

2第一个bean优先级设置了1,而第二个设置了6,越低越优先,所以过滤器1应该在过滤器2前面拦截

  

运行springboot,访问/测试/*请求如下图,再访问/v请求如下图只拦截了过滤器1,而过滤器2路径不匹配

  

春天引导过滤器FilterRegistrationBean实现方式

  

如果把.addUrlPatterns();中拦截路径改成一样/测试/*,则所有请求,都会触发2个过滤器,而且过滤器1永远在最先拦截

  

春天引导过滤器FilterRegistrationBean实现方式

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

弹簧引导过滤器FilterRegistrationBean实现方式