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

1:通过FilterRegistrationBean实例注册

2:通过@WebFilter注解生效

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

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

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

public class Test1Filter implements Filter {@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)throws IOException, ServletException {// TODO Auto-generated method stubHttpServletRequest request=(HttpServletRequest)arg0;System.out.println("自定义过滤器filter1触发,拦截url:"+request.getRequestURI());arg2.doFilter(arg0,arg1);}}
public class Test2Filter implements Filter {@Overridepublic void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)throws IOException, ServletException {// TODO Auto-generated method stubHttpServletRequest 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 {@Beanpublic 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;}@Beanpublic 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永远在最先拦截

spring boot过滤器FilterRegistrationBean相关推荐

  1. (21)Spring Boot过滤器、监听器【从零开始学Spring Boot】

    2019独角兽企业重金招聘Python工程师标准>>> Spring Boot 系列博客] (0)前言[从零开始学Spring Boot] : http://412887952-qq ...

  2. 【转载】Spring Boot 过滤器、监听器、拦截器的使用

    关注"Java后端技术全栈" 回复"面试"获取全套大厂面试资料 在开发中用到过滤器.监听器.拦截器的场景非常多,今天就来聊聊这三者在日常开发中是如何使用的. 概 ...

  3. Spring Boot 过滤器与拦截器的使用及其区别 和过滤器怎么设置运行顺序

    过滤器 过滤器的定义 在客户端将请求发送到服务器端之前,拦截这些请求:在服务器端的响应返回给客户端之前,处理这些响应. 比如字符编码过滤器CharacterEncodingFilter,就是设置req ...

  4. 4. Spring Boot 过滤器、监听器

    转自:https://blog.csdn.net/catoop/article/details/50501688 转载于:https://www.cnblogs.com/sharpest/p/7929 ...

  5. spring boot 1.5.4 整合redis、拦截器、过滤器、监听器、静态资源配置(十六)

    上一篇:spring boot 1.5.4 整合webService(十五) 1      Spring Boot整合redis和缓存 Spring Boot中除了对常用的关系型数据库提供了优秀的自动 ...

  6. Externalizing Session State for a Spring Boot Application Using Spring-Session

    为什么80%的码农都做不了架构师?>>>    Spring-session is a very cool new project that aims to provide a si ...

  7. Spring Boot实战:过滤器、拦截器与切片

    Spring Boot实战:过滤器.拦截器与切片 Q:使用过滤器.拦截器与切片实现每个请求耗时的统计,并比较三者的区别与联系 过滤器Filter 过滤器概念 Filter是J2E中来的,可以看做是Se ...

  8. Spring Boot实战:拦截器与过滤器

    一.拦截器与过滤器 在讲Spring boot之前,我们先了解一下过滤器和拦截器.这两者在功能方面很类似,但是在具体技术实现方面,差距还是比较大的.在分析两者的区别之前,我们先理解一下AOP的概念,A ...

  9. spring boot 拦截器获取controller返回的数据_高级码农Spring Boot实战与进阶之过滤器和拦截器的使用及其区别...

    众所周知的Spring Boot是很优秀的框架,它的出现简化了新Spring应用的初始搭建以及开发过程,大大减少了代码量,目前已被大多数企业认可和使用.这个专栏将对Spring Boot框架从浅入深, ...

最新文章

  1. RDKit | 基于RF和SVM的溶解度预测模型比较
  2. 机器学习的数据类型有哪几种?每种数据类型对应的操作有哪些?为什么?
  3. 编码,深浅拷贝和文件操作
  4. android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升
  5. js微信小程序页面左上角返回跳转指定页面
  6. 1.4编程基础之逻辑表达式与条件分支 09 判断能否被3,5,7整除
  7. P4838 P哥破解密码
  8. Presto架构及原理、安装及部署
  9. Scala学习03——基础语法
  10. 判断日期是否是合法的:
  11. 软件测试自学教程——书籍教程篇
  12. 电压跟随器的作用及特点
  13. 小程序父子组件间传值(微信/支付宝/钉钉)
  14. 轻量级web api_API接口管理,这15种开源工具助你管理API
  15. 机器人开发--NDC方案
  16. ArcBlock 赴美国华盛顿州议会作证支持区块链立法
  17. 一文了解KingSwap
  18. java作业Scanner收银
  19. 学习笔记(29):A110测试-测试课程申请22
  20. 世界互联网大会,乌镇,互联网人的盛会,大数据文摘来了!

热门文章

  1. 量子力学顺口溜_数学的幽默打油诗
  2. GBin1专题之Web热点秀#12
  3. Pytest学习笔记(15)-allure之@allure.epic()、@allure.feature()和@allure.story()
  4. openstack 遇到的error
  5. 基于HTML的环境网站设计 HTML+CSS环保网站项目实现 带设计说明psd
  6. stm32第一章cortex-M3处理器概述
  7. PS图片无法保存ICO格式解决方法
  8. 亚马逊、微软、谷歌,谁将是5000亿美元云市场的C位?
  9. 阿里巴巴引入字体图标的第二种方法:
  10. @Compoment