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以及踩过的坑相关推荐

  1. jedis使用_网易架构师心得:Springboot下使用redis踩过的坑

    点击?蓝色" 深入原理",关注并"设为星标" 技术干货,第一时间推送 首先总结了redis服务端单线程工作模型,redis四种部署方式及使用场景,然后从源码的角 ...

  2. SpringBoot v2.2.6 踩的坑 --- dubbo.scan.base_packages

    SpringBoot版本2.2.6遇到的坑------Dubbo整合SpringBoot一直报错: No provider available for the service com.xxx.xxx ...

  3. Spring boot升级到2.3.2.Release和Spring framework升级到5.28.Release踩过的坑

    目录 1. 利用下面方法启动spring boot 项目是系统参数不生效 2. org.drools.template.parser.DecisionTableParseException: Fail ...

  4. SpringBoot 快速开启事务(附常见坑点)

    SpringBoot 快速开启事务(附常见坑点) 序言:此前,我们主要通过XML配置Spring来托管事务.在SpringBoot则非常简单,只需在业务层添加事务注解(@Transactional ) ...

  5. Loadrunner11在Win10上使用踩过的坑

    环境:Win10家庭版,loadrunner11 loadrunner11只支持IE9及以下,而Win10的IE是降不了级的,所以自己写的脚本,记录踩过的坑. 1 安装 按照教程安装比较顺利,但是破解 ...

  6. 记SpringBoot项目运行2h自动挂掉的坑

    记SpringBoot项目运行2h自动挂掉的坑 背景 过程 解决方案一 解决方案二 总结 背景 以前多使用tomcat容器部署war项目或者使用jenkins直接部署,没有亲自体验过部署jar.所以, ...

  7. 那些年踩过的坑希望你们不要踩!

    PS:关于一段代码的运行 示例代码: name_set = {'邢佳栋', '李学庆', '高昊', '潘粤明', '戴军', '薛之谦', '贾宏声', '于波', '李连杰', '王斑', '蓝雨 ...

  8. 2019秋招总结(非科班转互联网,请不要踩我的坑)

    LZ本硕某985,专业是电子信息相关,秋招找的工作都是Java后端相关方向,投了有几十家,情况大致如下: 简历挂: 中电十四所(估计已经是招满了),陌陌(感觉是宣讲会直接放了简历就走了,所以简历没过) ...

  9. 第一次使用PLSQL操作Orcale踩到的坑

    第一次使用PLSQL操作Orcale踩到的坑 前言 踩过的坑 左侧文件树打不开 解决办法 手动修改,填写ID触发器不生效 需要手动提交 Orcale和MySQL的一些小差别 时间函数 字符串拼接 字符 ...

最新文章

  1. kangle php集成环境包,PHP探针-UPUPW环境集成包KANGLE专用版 | bftxjc.com contacts
  2. MySQL知识点链接
  3. 服务器怎么清除日志文件,如何清理服务器数据库日志文件
  4. input按钮中的onclick事件
  5. html 仿ios选择控件,仿ios垂直滚动选择
  6. Java并发编程实战~Happens-Before 规则
  7. df添加一行 python_Python为输出的数据绘制表格
  8. 计算机基本知识实训报告,计算机实训报告小结
  9. 自动清除html无用css,TinyMCE粘贴HTML代码,避免style属性被自动清除_html/css_WEB-ITnose...
  10. Oracle开发环境安装与使用
  11. Android 关于fragment切换重新加载的解决分享给大家
  12. 【经验】lingo / lindo报错:invalid syntax
  13. tensorflow.python.framework.tensor_shape.is_fully_defined()
  14. 20佳非常有创意的About页面设计
  15. 附件二:攻防演练保密协议.docx
  16. 软件测试实例:登录功能怎么设计测试用例
  17. 中国钢铁行业十四五形势展望与发展战略研究报告2022版
  18. 云计算需要学什么内容 学完可以胜任哪些岗位
  19. 数据铁笼-郑州Android项目ViewPager刷新问题
  20. 深度沉浸能力的锻炼方法

热门文章

  1. centos7 python3安装numpy_CentOS7 安装python库(numpy、scipy、matplotlib、scikit-learn、tensorflow)...
  2. gedit 可以实现的更多功能插件
  3. 计算机科学与技术专业导论_“课程思政”建设经验分享 | 王振武:专业导论(计算机科学与技术)...
  4. Python数据结构与算法(3.1)——栈
  5. android 动画间隔时间,Android使用View Animation实现动画加载界面
  6. java中对数组进行排序_如何在Java中对数组排序
  7. stl标准模板库_如何在C ++ STL(标准模板库)中使用Pair
  8. 选择对话框 android_Android日期时间选择器对话框
  9. win10安装应用商店版word(ump版word)
  10. NIO-ByteBuffer