首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中的过滤器有推荐的订购范围吗?

中的过滤器有推荐的订购范围吗?
EN

Stack Overflow用户
提问于 2021-07-05 13:16:40
回答 1查看 681关注 0票数 0

我想知道中是否存在网关过滤器(全局或非全局)的推荐订单范围,因为在网关链中存在订单小于1和大于9999的Spring网关过滤器。请参见:

代码语言:javascript
复制
{OrderedGatewayFilter@20770} "[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.RemoveCachedBodyFilter@5eb974}, order = -2147483648]"
{OrderedGatewayFilter@20771} "[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.AdaptCachedBodyGlobalFilter@ae5eeee}, order = -2147482648]"
{OrderedGatewayFilter@20772} "[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.NettyWriteResponseFilter@492c1b1b}, order = -1]"
{OrderedGatewayFilter@20774} "[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.ForwardPathFilter@3927de0e}, order = 0]"
{OrderedGatewayFilter@20775} "[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.GatewayMetricsFilter@36dab184}, order = 0]"

// my custom filters should be here

{OrderedGatewayFilter@20791} "[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter@72f112d1}, order = 10000]"
{OrderedGatewayFilter@20792} "[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.config.GatewayNoLoadBalancerClientAutoConfiguration$NoLoadBalancerClientFilter@71b9b035}, order = 10150]"
{OrderedGatewayFilter@20793} "[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.WebsocketRoutingFilter@4c475547}, order = 2147483646]"
{OrderedGatewayFilter@20794} "[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.NettyRoutingFilter@189f5ed8}, order = 2147483647]"
{OrderedGatewayFilter@20795} "[GatewayFilterAdapter{delegate=org.springframework.cloud.gateway.filter.ForwardRoutingFilter@10faebc9}, order = 2147483647]"

我的自定义全局过滤器实现有序接口:

代码语言:javascript
复制
@Component
public class GlobalFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { ... }
 
    @Override
    public int getOrder() {
        return 2; // here
    }
}

我的网关过滤器是OrderedGatewayFilter:

代码语言:javascript
复制
@Component
public class CustomFilter implements GatewayFilterFactory<CustomFilter.Config> {

    @Override
    public GatewayFilter apply(Config config) {
        return new OrderedGatewayFilter((exchange, chain) -> {
           ...
        }, 3); // here
    }

   ...
}

我的过滤器应该在1..9999范围内吗?或者在这些过滤器之前或之后放置我的自定义过滤器没有问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-10 14:52:55

过滤器链按org.springframework.core.Ordered接口排序。根据注释类型顺序上的Spring文档

默认值为Ordered.LOWEST_PRECEDENCE,表示最低优先级(丢失给任何其他指定的订单值)。

较低的值具有更高的优先级。

如果在IDE中检查该值,则最低可能值(具有最高优先级)为-2147483648。最高可能值是2147483647。

从有关全局滤波器的文档和一些经验来看,-1是一个起点,您可以围绕这一点安排所需的顺序。或者,如果您有一个始终需要首先执行的筛选器,请使用Ordered.HIGHEST_PRECEDENCE,然后从那里排序其他过滤器,如Ordered.HIGHEST_PRECEDENCE+1等。

编辑:内部有一些硬编码的过滤命令。"WRITE_RESPONSE_FILTER_ORDER = -1“在NettyWriteResponseFilter中。如果您担心干扰,请检查源代码的订单。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68256826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档