spring boot过滤器FilterRegistrationBean实现方式

所属分类: 软件编程 / java 阅读数: 34
收藏 0 赞 0 分享

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

1:通过FilterRegistrationBean实例注册

2:通过@WebFilter注解生效

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

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

通过实现javax.servlet.Filter接口,覆盖其doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)方法,决定拦截或放行

public class Test1Filter implements Filter {

  @Override
  public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
      throws IOException, ServletException {
    // TODO Auto-generated method stub
    HttpServletRequest request=(HttpServletRequest)arg0;
    System.out.println("自定义过滤器filter1触发,拦截url:"+request.getRequestURI());
    arg2.doFilter(arg0,arg1);
  }

}
public class Test2Filter implements Filter {
  @Override
  public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
      throws IOException, ServletException {
    // TODO Auto-generated method stub
    HttpServletRequest request=(HttpServletRequest)arg0;
    System.out.println("自定义过滤器filter2触发,拦截url:"+request.getRequestURI());
    arg2.doFilter(arg0,arg1);
  }

}

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

这里创建一个configuration类

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.example.demo.filter.Test1Filter;
import com.example.demo.filter.Test2Filter;

@Configuration
public class DemoConfiguration {

  @Bean
  public FilterRegistrationBean<Test1Filter> RegistTest1(){
    //通过FilterRegistrationBean实例设置优先级可以生效
    //通过@WebFilter无效
    FilterRegistrationBean<Test1Filter> bean = new FilterRegistrationBean<Test1Filter>();
    bean.setFilter(new Test1Filter());//注册自定义过滤器
    bean.setName("flilter1");//过滤器名称
    bean.addUrlPatterns("/*");//过滤所有路径
    bean.setOrder(1);//优先级,最顶级
    return bean;
  }
  @Bean
  public FilterRegistrationBean<Test2Filter> RegistTest2(){
    //通过FilterRegistrationBean实例设置优先级可以生效
    //通过@WebFilter无效
    FilterRegistrationBean<Test2Filter> bean = new FilterRegistrationBean<Test2Filter>();
    bean.setFilter(new Test2Filter());//注册自定义过滤器
    bean.setName("flilter2");//过滤器名称
    bean.addUrlPatterns("/test/*");//过滤所有路径
    bean.setOrder(6);//优先级,越低越优先
    return bean;
  }
}

其中

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

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

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

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

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

更多精彩内容其他人还在看

Springmvc restful配置遇到的小坑

本文是小编给大家带了的Springmvc restful配置遇到的小小坑,小编给大家带来了问题原因及解决办法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
收藏 0 赞 0 分享

Java中的匿名内部类小结

java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。这篇文章主要介绍了Java中的匿名内部类的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java的云打印Lodop

这篇文章主要介绍了Java的云打印Lodop 的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java线程池框架核心代码解析

这篇文章主要针对Java线程池框架核心代码进行详细解析,分析Java线程池框架的实现ThreadPoolExecutor,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java 交换两个变量的数值实现方法

下面小编就为大家带来一篇Java 交换两个变量的数值实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

全面了解JAVA_BaseDAO数据处理类

下面小编就为大家带来一篇全面了解JAVA_BaseDAO数据处理类。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

java、python、JavaScript以及jquery循环语句的区别

本篇文章主要介绍java、python、JavaScript以及jquery的循环语句的区别,这里整理了它们循环语句语法跟示例,以便大家阅读,更好的区分它们的不同
收藏 0 赞 0 分享

基于JDBC封装的BaseDao(实例代码)

下面小编就为大家带来一篇基于JDBC封装的BaseDao(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

简单通用JDBC辅助类封装(实例)

下面小编就为大家带来一篇简单通用JDBC辅助类封装(实例)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

浅谈java线程中生产者与消费者的问题

下面小编就为大家带来一篇浅谈java线程中生产者与消费者的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多