V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lchqfnu
V2EX  ›  Java

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

  •  
  •   lchqfnu · 2022-10-14 15:05:55 +08:00 · 1203 次点击
    这是一个创建于 799 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近学习 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 的日志优先打印出来。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2276 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:05 · PVG 10:05 · LAX 18:05 · JFK 21:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.