Spring Cloud Gateway 使用过滤器工厂时,如何改变过滤器在调用链中的顺序?

2022-10-14 15:05:55 +08:00
 lchqfnu

最近学习 SCG 1 、GlobalFilter 类型的过滤器,可以通过实现 Ordered 接口,来设置该过滤器的调用优先级。

2 、使用 FilterGatewayFactory 可以更灵活的配置某一路由的规则,使用方式为继承 AbstractGatewayFilterFactory ,实现 apply 接口,将过滤逻辑以 GatewayFilter 的形式返回。

3 、观察 SCG 自身的 JsonToGrpcGatewayFilterFactory,ReqeustHeaderToRequestUriGatewayFilterFactory 等,使用 OrderedGatewayFilter 设置了 order 值。

4 、自定义 GatewayFilterFactory ,通过 3 中的方式设置了 order 值,但发现无论怎么设置,都无法与自定义的 GlobalFilter 中的日志调换优先度。

5 、具体的场景细节:

5.1 LoggerGlobalFilter 作为全局过滤器,打印 HTTP 响应报文的日志,order 值假设为 a, a 小于-1 。(因为大于-1 就抓不到响应的报文内容了)。

5.2 ABCModifyResponseGatewayFilterFactory 作为工厂类,可根据需要配置给某路由进行返回报文的修改,使用 OrdedGatwayFilter 的方式,order 值设为 b 。

5.3 上述两个操作,希望响应报文的日志最先打印,然后再进行修改操作。无论 b<a<-1 ,还是 a<b<-1 ,都无法使 5.1 的日志优先打印出来。

1170 次点击
所在节点    Java
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/886936

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX