spring boot过滤器FilterRegistrationBean
有2种方式可以实现过滤器
1:通过FilterRegistrationBean实例注册
2:通过@WebFilter注解生效
这里选择第一种,因为第二种不能设置过滤器之间的优先级
为了演示优先级,这里创建2个测试过滤器类:Test1Filter、Test2Filter
通过实现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相关推荐
- (21)Spring Boot过滤器、监听器【从零开始学Spring Boot】
2019独角兽企业重金招聘Python工程师标准>>> Spring Boot 系列博客] (0)前言[从零开始学Spring Boot] : http://412887952-qq ...
- 【转载】Spring Boot 过滤器、监听器、拦截器的使用
关注"Java后端技术全栈" 回复"面试"获取全套大厂面试资料 在开发中用到过滤器.监听器.拦截器的场景非常多,今天就来聊聊这三者在日常开发中是如何使用的. 概 ...
- Spring Boot 过滤器与拦截器的使用及其区别 和过滤器怎么设置运行顺序
过滤器 过滤器的定义 在客户端将请求发送到服务器端之前,拦截这些请求:在服务器端的响应返回给客户端之前,处理这些响应. 比如字符编码过滤器CharacterEncodingFilter,就是设置req ...
- 4. Spring Boot 过滤器、监听器
转自:https://blog.csdn.net/catoop/article/details/50501688 转载于:https://www.cnblogs.com/sharpest/p/7929 ...
- spring boot 1.5.4 整合redis、拦截器、过滤器、监听器、静态资源配置(十六)
上一篇:spring boot 1.5.4 整合webService(十五) 1 Spring Boot整合redis和缓存 Spring Boot中除了对常用的关系型数据库提供了优秀的自动 ...
- 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 ...
- Spring Boot实战:过滤器、拦截器与切片
Spring Boot实战:过滤器.拦截器与切片 Q:使用过滤器.拦截器与切片实现每个请求耗时的统计,并比较三者的区别与联系 过滤器Filter 过滤器概念 Filter是J2E中来的,可以看做是Se ...
- Spring Boot实战:拦截器与过滤器
一.拦截器与过滤器 在讲Spring boot之前,我们先了解一下过滤器和拦截器.这两者在功能方面很类似,但是在具体技术实现方面,差距还是比较大的.在分析两者的区别之前,我们先理解一下AOP的概念,A ...
- spring boot 拦截器获取controller返回的数据_高级码农Spring Boot实战与进阶之过滤器和拦截器的使用及其区别...
众所周知的Spring Boot是很优秀的框架,它的出现简化了新Spring应用的初始搭建以及开发过程,大大减少了代码量,目前已被大多数企业认可和使用.这个专栏将对Spring Boot框架从浅入深, ...
最新文章
- RDKit | 基于RF和SVM的溶解度预测模型比较
- 机器学习的数据类型有哪几种?每种数据类型对应的操作有哪些?为什么?
- 编码,深浅拷贝和文件操作
- android 智能指针的学习先看邓凡平的书扫盲 再看前面两片博客提升
- js微信小程序页面左上角返回跳转指定页面
- 1.4编程基础之逻辑表达式与条件分支 09 判断能否被3,5,7整除
- P4838 P哥破解密码
- Presto架构及原理、安装及部署
- Scala学习03——基础语法
- 判断日期是否是合法的:
- 软件测试自学教程——书籍教程篇
- 电压跟随器的作用及特点
- 小程序父子组件间传值(微信/支付宝/钉钉)
- 轻量级web api_API接口管理,这15种开源工具助你管理API
- 机器人开发--NDC方案
- ArcBlock 赴美国华盛顿州议会作证支持区块链立法
- 一文了解KingSwap
- java作业Scanner收银
- 学习笔记(29):A110测试-测试课程申请22
- 世界互联网大会,乌镇,互联网人的盛会,大数据文摘来了!
热门文章
- 量子力学顺口溜_数学的幽默打油诗
- GBin1专题之Web热点秀#12
- Pytest学习笔记(15)-allure之@allure.epic()、@allure.feature()和@allure.story()
- openstack 遇到的error
- 基于HTML的环境网站设计 HTML+CSS环保网站项目实现 带设计说明psd
- stm32第一章cortex-M3处理器概述
- PS图片无法保存ICO格式解决方法
- 亚马逊、微软、谷歌,谁将是5000亿美元云市场的C位?
- 阿里巴巴引入字体图标的第二种方法:
- @Compoment