SpringBoot 之多个过滤器(Filter) ,监听器(Listener),切面(AOP),拦截器(Interceptor)的指定排序问题总结篇
相关文章:
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)的指定排序问题总结篇相关推荐
- JAVA incept_java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例
java 过滤器Filter: package com.sun.test.aircraft.filter; import javax.servlet.*; import java.io.IOExcep ...
- JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别
JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别 如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param–>lis ...
- 从零开始SpringCloud Alibaba实战(59)——过滤器filter、拦截器interceptor、和AOP的区别与联系及应用
文章目录 前言 过滤器 拦截器 过滤器与拦截器的区别 AOP(面向切面) 三者使用场景 Filter过滤器 Interceptor拦截器 Spring AOP拦截器 Filter与Intercepto ...
- spring过滤器Filter 、 拦截器Interceptor 、 切片Aspect 详解
springboot 过滤器Filter vs 拦截器Interceptor vs 切片Aspect 详解 1 前言 最近接触到了过滤器和拦截器,网上查了查资料,这里记录一下,这篇文章就来仔细剖析下过 ...
- springboot中的拦截器interceptor和过滤器filter,多次获取request参数
大家好,我是烤鸭: 这是一篇关于springboot的拦截器(interceptor)和过滤器(Filter). 先说一下过滤器和拦截器. 区别: 1. servlet请求,顺序:Filter ...
- 总结 拦截器(Interceptor) 和 过滤器(Filter)的区别
一.前言 拦截器(Interceptor) 和 过滤器(Filter)的区别是面试中常问的问题,也是开发中容易被大家混淆的问题,在此总结下,希望对大家有所帮助. 二.Filter 介绍 2.1.概念 ...
- Springmvc中的拦截器interceptor及与过滤器filter的区别
一.Springmvc中的拦截器概述及与过滤器filter的区别 1).Springmvc中的拦截器interceptor用于对控制器controller进行预处理和后处理的技术; 2).可以定义拦截 ...
- SpringMVC→拦截器、SpringMVC拦截器实现、多个拦截器工作原理、拦截器使用场景、拦截器Interceptor与过滤器Filter区别
拦截器 拦截器实现 多个拦截器工作原理 拦截器使用场景 请求编码设置及请求登录Session校验 使用时间段设置 拦截器Interceptor与过滤器Filter区别
- Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系
在我们日常的开发中,我们经常会用到Filter和Interceptor.有时同一个功能.Filter可以做,Interceptor也可以做.有时就需要考虑使用哪一个比较好.这篇文章主要介绍一下,二者的 ...
- 过滤器(Filter)和拦截器(interceptor)区别
一:过滤器是Servlet中的对象 拦截器是框架中的对象,是基与web框架的 二:过滤器实现Filter接口的对象 拦截器是实现HandlerInterceptor 三:过滤器是用来设置request ...
最新文章
- 难忘的一天——装操系统(五)
- android锁屏流程_Android开机锁屏流程分析
- Spring Cloud 微服务入门(二)--Spring Cloud 架构
- 【转】Linux单人维护密码
- python语言基础与应用章节七_专技天下Python语言基础与应用章节测试答案
- 在 Ubuntu 16.04 上安装 LEMP 环境之图文向导
- 关于人工智能引擎的最初分析文档
- JavaScript中错误正确处理方式,你用对了吗? 1
- 指定的颜色信息显示方法
- IPv6 带来的反欺诈难题,程序员该如何破解?
- [LeetCode] 204. Count Primes
- jenkins java必装插件_Jenkins(三)安装相关插件
- 深入剖析Android音频之AudioPolicyService
- Net设计模式实例之桥接模式( Bridge Pattern)(4)
- 最好用的个人财务管理工具 Money Pro 2.7.4中文版
- html手机表白弹窗,怎么制作抖音弹窗表白代码 制作抖音弹窗表白代码的教程
- 只能用于文本与图像数据?No!看TabTransformer对结构化业务数据精准建模 ⛵
- 引流工具GoReplay简介和在猪齿鱼效能平台中的应用
- APM的解锁(ARM)流程
- 第一章 HTML基础