Springboot使用Filter以及踩过的坑
Springboot使用Filter以及踩过的坑
在Springboot中使用Filter有两种方式,注解方式,注册bean方式
一、注解@WebFilter
1、实现Filter接口(javax.servlet)
2、添加@WebFilter注解
3、启动类添加@ServletComponentScan注解
附上代码:
第一个Filter:
@Slf4j @WebFilter(filterName = "filter1", urlPatterns = {"/url1/*"}) public class Filter1_Filter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("do filter1");filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {}}
第二个Filter:
@Slf4j @WebFilter(filterName = "filter2", urlPatterns = {"/url2/*"}) public class Filter2_Filter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("do filter2");filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {}}
启动类:
@SpringBootApplication @ServletComponentScan public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication .class, args);}}
下面说说我踩过的坑
1、不加@ServletComponentScan注解无法注入Filter,这个注解的作用就是去扫描@WebServlet、@WebFilter、@WebListener这类特殊注解。如果不加,spring容器是不会主动扫描的
2、多个Filter的执行顺序,说出来你可能不信,这种注解方式实现的Filter是通过Filter的类名首字母来控制执行顺序的,像Filter1_Filter就比Filter2_Filter先执行。但网上一些资料说,当Filter数量很多时,是没有明确的执行顺序的,所以这种方式还是放弃吧,推荐第二种
二、注册bean
1、实现Filter接口
2、注册Filter
下面附上代码:
第一个Filter:
@Slf4j public class Filter1 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("do filter1");filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {}}
第二个Filter:
@Slf4j public class Filter2 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("do filter2");filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {}}
注册类:
@Configuration public class FilterConfig {@Beanpublic Filter filter1(){return new Filter1();}@Beanpublic Filter filter2(){return new Filter2();}@Beanpublic FilterRegistrationBean setFilter1() {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(filter1());filterRegistrationBean.addUrlPatterns("/url1/*");filterRegistrationBean.setOrder(1); //order的数值越小,在所有的filter中优先级越高return filterRegistrationBean;}@Beanpublic FilterRegistrationBean setFilter2(){FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(filter2());filterRegistrationBean.addUrlPatterns("/url2/*");filterRegistrationBean.setOrder(2); //order的数值越小,在所有的filter中优先级越高return filterRegistrationBean;}}
这种方式就比较严谨了,通过filterRegistrationBean.setOrder(1)设置执行顺序亲测有效
转载于:https://www.cnblogs.com/javafucker/p/10144958.html
Springboot使用Filter以及踩过的坑相关推荐
- jedis使用_网易架构师心得:Springboot下使用redis踩过的坑
点击?蓝色" 深入原理",关注并"设为星标" 技术干货,第一时间推送 首先总结了redis服务端单线程工作模型,redis四种部署方式及使用场景,然后从源码的角 ...
- SpringBoot v2.2.6 踩的坑 --- dubbo.scan.base_packages
SpringBoot版本2.2.6遇到的坑------Dubbo整合SpringBoot一直报错: No provider available for the service com.xxx.xxx ...
- Spring boot升级到2.3.2.Release和Spring framework升级到5.28.Release踩过的坑
目录 1. 利用下面方法启动spring boot 项目是系统参数不生效 2. org.drools.template.parser.DecisionTableParseException: Fail ...
- SpringBoot 快速开启事务(附常见坑点)
SpringBoot 快速开启事务(附常见坑点) 序言:此前,我们主要通过XML配置Spring来托管事务.在SpringBoot则非常简单,只需在业务层添加事务注解(@Transactional ) ...
- Loadrunner11在Win10上使用踩过的坑
环境:Win10家庭版,loadrunner11 loadrunner11只支持IE9及以下,而Win10的IE是降不了级的,所以自己写的脚本,记录踩过的坑. 1 安装 按照教程安装比较顺利,但是破解 ...
- 记SpringBoot项目运行2h自动挂掉的坑
记SpringBoot项目运行2h自动挂掉的坑 背景 过程 解决方案一 解决方案二 总结 背景 以前多使用tomcat容器部署war项目或者使用jenkins直接部署,没有亲自体验过部署jar.所以, ...
- 那些年踩过的坑希望你们不要踩!
PS:关于一段代码的运行 示例代码: name_set = {'邢佳栋', '李学庆', '高昊', '潘粤明', '戴军', '薛之谦', '贾宏声', '于波', '李连杰', '王斑', '蓝雨 ...
- 2019秋招总结(非科班转互联网,请不要踩我的坑)
LZ本硕某985,专业是电子信息相关,秋招找的工作都是Java后端相关方向,投了有几十家,情况大致如下: 简历挂: 中电十四所(估计已经是招满了),陌陌(感觉是宣讲会直接放了简历就走了,所以简历没过) ...
- 第一次使用PLSQL操作Orcale踩到的坑
第一次使用PLSQL操作Orcale踩到的坑 前言 踩过的坑 左侧文件树打不开 解决办法 手动修改,填写ID触发器不生效 需要手动提交 Orcale和MySQL的一些小差别 时间函数 字符串拼接 字符 ...
最新文章
- kangle php集成环境包,PHP探针-UPUPW环境集成包KANGLE专用版 | bftxjc.com contacts
- MySQL知识点链接
- 服务器怎么清除日志文件,如何清理服务器数据库日志文件
- input按钮中的onclick事件
- html 仿ios选择控件,仿ios垂直滚动选择
- Java并发编程实战~Happens-Before 规则
- df添加一行 python_Python为输出的数据绘制表格
- 计算机基本知识实训报告,计算机实训报告小结
- 自动清除html无用css,TinyMCE粘贴HTML代码,避免style属性被自动清除_html/css_WEB-ITnose...
- Oracle开发环境安装与使用
- Android 关于fragment切换重新加载的解决分享给大家
- 【经验】lingo / lindo报错:invalid syntax
- tensorflow.python.framework.tensor_shape.is_fully_defined()
- 20佳非常有创意的About页面设计
- 附件二:攻防演练保密协议.docx
- 软件测试实例:登录功能怎么设计测试用例
- 中国钢铁行业十四五形势展望与发展战略研究报告2022版
- 云计算需要学什么内容 学完可以胜任哪些岗位
- 数据铁笼-郑州Android项目ViewPager刷新问题
- 深度沉浸能力的锻炼方法
热门文章
- centos7 python3安装numpy_CentOS7 安装python库(numpy、scipy、matplotlib、scikit-learn、tensorflow)...
- gedit 可以实现的更多功能插件
- 计算机科学与技术专业导论_“课程思政”建设经验分享 | 王振武:专业导论(计算机科学与技术)...
- Python数据结构与算法(3.1)——栈
- android 动画间隔时间,Android使用View Animation实现动画加载界面
- java中对数组进行排序_如何在Java中对数组排序
- stl标准模板库_如何在C ++ STL(标准模板库)中使用Pair
- 选择对话框 android_Android日期时间选择器对话框
- win10安装应用商店版word(ump版word)
- NIO-ByteBuffer