相关文章:
SpringBoot 之AOP切面的使用
SpringBoot之Listener注册到Spring容器中的多种方法
SpringBoot之Interceptor拦截器注入使用
SpringBoot之Filter过滤器的实现及排序问题

过滤器(Filter) ,监听器(Listener)

这两个实现排序是一样的。
无法通过Ordered接口,@Order注解实现排序,只能使用以下方法

使用@WebFilter,@WebListener

@WebFilter,@WebListener没有提供 order参数,只能通过类名进行排序
比如:

Filter1,Filter2,Filter3 这三个Filter依次执行。
Listener1,Listener2,Listener3 这三个Listener依次执行。

使用FilterRegistrationBean / ServletListenerRegistrationBean

FilterRegistrationBean/ServletListenerRegistrationBean最终继承了RegistrationBean 提供了setOrder方法。

@Configuration
public class FilterConfig {@Beanpublic FilterRegistrationBean LoginFilter(){FilterRegistrationBean registrationBean = new FilterRegistrationBean();registrationBean.setFilter(new LoginFilter());registrationBean.addInitParameter("test","true");registrationBean.addInitParameter("test1", "test");registrationBean.addUrlPatterns("/*");registrationBean.setOrder(1); // 设置排序registrationBean.setDispatcherTypes(DispatcherType.REQUEST);return registrationBean;}
}@Configuration
public class ListenerConfig {@Beanpublic ServletListenerRegistrationBean configContextListener() {ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean();bean.setListener(new ConfigContextListener());return bean;}
}

切面(AOP)

第一种:实现Ordered接口,数值越小越先执行

第二种,@order注解,数值越小越先执行

拦截器(Interceptor)

只能在配置文件中实现。设置@Order注解和实现Ordered接口也都是不行的。

@Configuration
public class MvcInterceptorConfig extends WebMvcConfigurationSupport {@Autowiredprivate LoginInterceptor loginInterceptor;@Overrideprotected void addInterceptors(InterceptorRegistry registry) {// 多个拦截器组成一个拦截器链// addPathPatterns 用于添加拦截规则,/**表示拦截所有请求// excludePathPatterns 用户排除拦截registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/stuInfo/getAllStuInfoA","/account/register");  }
}

在未设置order方法值时,通过拦截器添加顺序控制:

registry.addInterceptor(repeatPutInterceptor) // 1
registry.addInterceptor(refererInterceptor) // 2
registry.addInterceptor(loginAuthInterceptor) //3

针对于preHandle 执行顺序为:1->2->3
针对于postHandle执行顺序为:3->2->1
针对于afterCompletion执行顺序为:3->2->1

设置order值时:此时能实现自定义顺序

registry.addInterceptor(repeatPutInterceptor).order(1) // 1
registry.addInterceptor(loginAuthInterceptor).order(3) //2
registry.addInterceptor(refererInterceptor).order(2) // 3

针对于preHandle 执行顺序为:1->3->2
针对于postHandle执行顺序为:2->3->1
针对于afterCompletion执行顺序为:2->3->1

源码出处:InterceptorRegistry类

protected List<Object> getInterceptors() {return this.registrations.stream().sorted(INTERCEPTOR_ORDER_COMPARATOR).map(InterceptorRegistration::getInterceptor).collect(Collectors.toList());
}private static final Comparator<Object> INTERCEPTOR_ORDER_COMPARATOR =OrderComparator.INSTANCE.withSourceProvider(object -> {if (object instanceof InterceptorRegistration) {return (Ordered) ((InterceptorRegistration) object)::getOrder;}return null;});

SpringBoot 之多个过滤器(Filter) ,监听器(Listener),切面(AOP),拦截器(Interceptor)的指定排序问题总结篇相关推荐

  1. JAVA incept_java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例

    java 过滤器Filter: package com.sun.test.aircraft.filter; import javax.servlet.*; import java.io.IOExcep ...

  2. JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别

    JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别 如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param–>lis ...

  3. 从零开始SpringCloud Alibaba实战(59)——过滤器filter、拦截器interceptor、和AOP的区别与联系及应用

    文章目录 前言 过滤器 拦截器 过滤器与拦截器的区别 AOP(面向切面) 三者使用场景 Filter过滤器 Interceptor拦截器 Spring AOP拦截器 Filter与Intercepto ...

  4. spring过滤器Filter 、 拦截器Interceptor 、 切片Aspect 详解

    springboot 过滤器Filter vs 拦截器Interceptor vs 切片Aspect 详解 1 前言 最近接触到了过滤器和拦截器,网上查了查资料,这里记录一下,这篇文章就来仔细剖析下过 ...

  5. springboot中的拦截器interceptor和过滤器filter,多次获取request参数

    大家好,我是烤鸭:     这是一篇关于springboot的拦截器(interceptor)和过滤器(Filter). 先说一下过滤器和拦截器. 区别: 1. servlet请求,顺序:Filter ...

  6. 总结 拦截器(Interceptor) 和 过滤器(Filter)的区别

    一.前言 拦截器(Interceptor) 和 过滤器(Filter)的区别是面试中常问的问题,也是开发中容易被大家混淆的问题,在此总结下,希望对大家有所帮助. 二.Filter 介绍 2.1.概念 ...

  7. Springmvc中的拦截器interceptor及与过滤器filter的区别

    一.Springmvc中的拦截器概述及与过滤器filter的区别 1).Springmvc中的拦截器interceptor用于对控制器controller进行预处理和后处理的技术; 2).可以定义拦截 ...

  8. SpringMVC→拦截器、SpringMVC拦截器实现、多个拦截器工作原理、拦截器使用场景、拦截器Interceptor与过滤器Filter区别

    拦截器 拦截器实现 多个拦截器工作原理 拦截器使用场景 请求编码设置及请求登录Session校验 使用时间段设置 拦截器Interceptor与过滤器Filter区别

  9. Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系

    在我们日常的开发中,我们经常会用到Filter和Interceptor.有时同一个功能.Filter可以做,Interceptor也可以做.有时就需要考虑使用哪一个比较好.这篇文章主要介绍一下,二者的 ...

  10. 过滤器(Filter)和拦截器(interceptor)区别

    一:过滤器是Servlet中的对象 拦截器是框架中的对象,是基与web框架的 二:过滤器实现Filter接口的对象 拦截器是实现HandlerInterceptor 三:过滤器是用来设置request ...

最新文章

  1. 难忘的一天——装操系统(五)
  2. android锁屏流程_Android开机锁屏流程分析
  3. Spring Cloud 微服务入门(二)--Spring Cloud 架构
  4. 【转】Linux单人维护密码
  5. python语言基础与应用章节七_专技天下Python语言基础与应用章节测试答案
  6. 在 Ubuntu 16.04 上安装 LEMP 环境之图文向导
  7. 关于人工智能引擎的最初分析文档
  8. JavaScript中错误正确处理方式,你用对了吗? 1
  9. 指定的颜色信息显示方法
  10. IPv6 带来的反欺诈难题,程序员该如何破解?
  11. [LeetCode] 204. Count Primes
  12. jenkins java必装插件_Jenkins(三)安装相关插件
  13. 深入剖析Android音频之AudioPolicyService
  14. Net设计模式实例之桥接模式( Bridge Pattern)(4)
  15. 最好用的个人财务管理工具 Money Pro 2.7.4中文版
  16. html手机表白弹窗,怎么制作抖音弹窗表白代码 制作抖音弹窗表白代码的教程
  17. 只能用于文本与图像数据?No!看TabTransformer对结构化业务数据精准建模 ⛵
  18. 引流工具GoReplay简介和在猪齿鱼效能平台中的应用
  19. APM的解锁(ARM)流程
  20. 第一章 HTML基础

热门文章

  1. Android编程之仿微信显示更多文字的View
  2. ios与android设备即时语音互通的录音格式预研说明
  3. 01-HTML基础与进阶-day3-录像236
  4. IBM Copy Service--Flashcopy Introduction
  5. Sql 列转行 三种方法对比
  6. Data - 信息获取途径汇总
  7. 文章页调用栏目链接和栏目名称的方法
  8. 源码解析Servlet和HttpServlet
  9. Mac 识别NTFS移动硬盘
  10. WebService之Axis2 (3):使用services.xml文件发布WebService