有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无效 FilterRegistrationBean bean=new FilterRegistrationBean (); bean。setFilter(新Test1Filter());//注册自定义过滤器 bean.setName (flilter1 ");//过滤器名称 bean.addUrlPatterns("/* ");//过滤所有路径 bean.setOrder(1);//优先级,最顶级 返回bean; } @ bean 公共FilterRegistrationBean RegistTest2 () {//通过FilterRegistrationBean实例设置优先级可以生效//通过@WebFilter无效 FilterRegistrationBean bean=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路径不匹配
如果把.addUrlPatterns();中拦截路径改成一样/测试/*,则所有请求,都会触发2个过滤器,而且过滤器1永远在最先拦截
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。