V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
lchqfnu
V2EX  ›  Java

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

  •  
  •   lchqfnu · Oct 14, 2022 · 1850 views
    This topic created in 1295 days ago, the information mentioned may be changed or developed.

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

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   811 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 22:31 · PVG 06:31 · LAX 15:31 · JFK 18:31
    ♥ Do have faith in what you're doing.