过滤器执行顺序

简介: 过滤器执行顺序

请求进入网关会碰到三类过滤器:当前路由的过滤器、DefaultFilter、GlobalFilter

请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器

问题:当前路由过滤器和DefaultFilter、GlobalFilter 这是三个不同类型的过滤器,如何将其放到一个集合中并排序呢?

实际上 路由过滤器 和 DefaultFilter ,非常接近,只不过一个放在路由器内,一个放在路由器外


上图中的两个AddRequestHeader,他们在java的底层都来源于同一个过滤器工厂,生成的真正过滤器都是GatewayFilter,所以我们认为 路由过滤器 和 DefaultFilter 都是同一种过滤器 GatewayFilter

在网关中,有一个过滤器适配器,如下,其实现了 GatewayFilter 接口,我们开到其内部有个GlobalFiler属性,我们只要将 GlobalFiler 传入,该适配器就能将GlobalFiler 变为GatewayFilter

也就是在网关中,所有的过滤器都会被适配为GatewayFilter,至此就解决了三种过滤器类型不同的问题

问题:如何排序?

  • 每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执行顺序越靠前

GlobalFilter通过实现Ordered接口,或者添加@Order注解来指定order值,由我们自己指定

路由过滤器和defaultFilter的order由Spring指定,默认是按照声明顺序从1递增,如下

当过滤器的order值一样时,会按照 defaultFilter > 路由过滤器 > GlobalFilter的顺序执行  


目录
相关文章
|
5天前
|
Java Spring 容器
[JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
[JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
|
7月前
|
Java 容器
28JavaWeb基础 - 过滤器
28JavaWeb基础 - 过滤器
26 0
|
4天前
|
Python
过滤器
过滤器
10 2
|
5天前
过滤器&拦截器
过滤器&拦截器
32 0
过滤器&拦截器
|
10月前
|
设计模式 Java 应用服务中间件
多个Filter的执行顺序 | 职责链模式应用
多个Filter的执行顺序 | 职责链模式应用
|
7月前
|
Java 容器
过滤器和拦截器的区别
Filter 也称为过滤器,基于Servlet实现,拦截器(Interceptor)是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行,基于AOP思想,对方法进行增强。和servlet 中的过滤器类似,都是对用户请求进行处理。
50 0
|
9月前
|
API 微服务
全局过滤器 GlobalFilter
全局过滤器 GlobalFilter
161 0
SpringMVC中多个拦截器的执行顺序
SpringMVC中多个拦截器的执行顺序
|
11月前
|
监控 Java 数据库连接
过滤器的应用
在上一篇博客中,我们简单的学习了一下面向切面编程,而过滤器就是对这一思想的应用。那如何在项目中使用呢?