过滤器执行顺序

请求进入网关会碰到三类过滤器:当前路由的过滤器、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的顺序执行 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值