Gateway 网关 之 自定义断言

自定义 PredicateFactory

可以定义针对于 Router 的 Predicate。

注意:

1、类名必须叫做XxxRoutePredicateFactory.注入到Spring容器后使用时的名称就叫做Xxx。

2、类必须继承 AbstractRoutePredicateFactory,让父类帮实现配置参数的处理

3、必须声明一个静态的内部类,进行传递参数

4、(可选)可以进行 重写 shortcutFieldOrder 方法进行属性字段排序,实现配置简写

5、重写apply( ) 函数,返回 true 表示路由成功,false 表示路由失败 404

 

如下测试案例(仅测试示例,没有实际意义,内置的断言能满足大多数的场景的):

public class TenantRoutePredicateFactory extends AbstractRoutePredicateFactory<TenantRoutePredicateFactory.Config> {

    public TenantRoutePredicateFactory() {
        super(TenantRoutePredicateFactory.Config.class);
    }

    @Override
    public Predicate<ServerWebExchange> apply(Config config) {
        return exchange -> config.getTenantId() != null && config.getTenantId().length() != 0;
    }

    /**
     * 字段排序实现配置简写
     *
     * @return
     */
    @Override
    public List<String> shortcutFieldOrder() {
        return List.of("tenantId");
    }

    @Setter
    @Getter
    public static class Config {
        /**
         * 租户Id编码
         */
        private String tenantId;
    }
}

 

>>>>>>>>>>>>>> 下一篇 :  过滤器  <<<<<<<<<<<<<<<<<

 

posted @ 2023-02-10 00:57  Vermeer  阅读(302)  评论(0)    收藏  举报