网关 Spring Cloud Gateway 自定义过滤器(全局过滤器以及网关过滤器)

return chain.filter(exchange)

.then(Mono.fromRunnable(() -> {

// Post-processing

if (config.isPostLogger()) {

logger.info("Post GatewayFilter logging: "

  • config.getBaseMessage());

}

}));

};

}

4.2 用配置注册GatewayFilter

现在,我们可以轻松地将过滤器注册到我们先前在应用程序属性中定义的路由:

filters:

  • RewritePath=/service(?/?.*), ${segment}

  • name: Logging

args:

baseMessage: My Custom Message

preLogger: true

postLogger: true

我们只需要指出配置参数即可。这里重要的一点是,我们需要在LoggingGatewayFilterFactory.Config 类中配置无参数的构造函数和设置器,此方法才能正常工作。

如果我们想使用紧凑表示法配置过滤器,则可以执行以下操作:

filters:

  • RewritePath=/service(?/?.*), ${segment}

  • Logging=My Custom Message, true, true

我们需要对工厂进行一些调整。简而言之,我们必须重写_shortcutFieldOrder_方法,以指示快捷方式属性将使用的顺序和多少个参数:

@Override

public List shortcutFieldOrder() {

return Arrays.asList(“baseMessage”,

“preLogger”,

“postLogger”);

}

4.3 GatewayFilter顺序

如果要配置过滤器在过滤器链中的位置,可以AbstractGatewayFilterFactory#apply 方法而不是简单的lambda表达式中检索 OrderedGatewayFilter实例:

@Override

public GatewayFilter apply(Config config) {

return new OrderedGatewayFilter((exchange, chain) -> {

// …

}, 1);

}

4.4 以编程方式注册GatewayFilter

此外,我们也可以通过编程方式注册过滤器。让我们通过设置_RouteLocator_ bean重新定义我们一直在使用的路由:

@Bean

public RouteLocator routes(

RouteLocatorBuilder builder,

LoggingGatewayFilterFactory loggingFactory) {

return builder.routes()

.route(“service_route_java_config”, r -> r.path(“/service/**”)

.filters(f ->

f.rewritePath(“/service(?/?.*)”, “$\{segment}”)

.filter(loggingFactory.apply(

new Config(“My Custom Message”, true, true))))

.uri(“http://localhost:8081”))

.build();

}

5.高级方案


到目前为止࿰

  • 18
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值