我对Spring Cloud Gateway很陌生,对我的正则表达式也很生疏。我在谷歌上搜索过,但还没有找到答案。事实上,这是我20年职业生涯中关于stackoverflow的第一篇文章:)
我正在尝试允许流量进入host1.com/enablement/requests并将其转发到host2.com/enablement/request.注意第二个URI中缺少s。我还没有看到任何如何重写网址的示例。是因为我忽略了一个简单的正则表达式吗?
我在许多例子中看到过这个。你能解释一下它在做什么吗?
- RewritePath=/enablement/workflow(?<segment>/?.*), $\{segment}
spring:
cloud:
gateway:
routes:
- id: data_service_route
uri: host2.com/enablement
predicates:
- Path=/enablement/requests
- Method=POST,GET,PUT
filters:
- RewritePath=???
任何建议/例子将不胜感激。
杰夫
过去几天我一直在玩spring-cloud-网关,让我试着解释一下:
RewritePath=/enablement/workflow(?<segment>/?.*), $\{segment}
这里有2个表达式,由逗号分隔,一个用于模式匹配的正则表达式和替换字符串。
(?
$\{段}
是替换字符串-在本例中,这将是捕获的组段的值。转义(yaml)需要反冲\。
所以/enablement/workflow/endpoint
变成了/endpoint
下面是一个非常基本的代码片段:
String regexp = "/enablement/requests/(?<path>.*)";
String replacement = "/enablement/request/${path}";
String path = "hostname:port/enablement/requests/endpoint";
System.out.println(path.replaceAll(regexp, replacement));
下面是刷新正则表达式的一个非常有用的链接:
https://medium.com/factory-mind/regex-tutorial-a-simple-cheatsheet-by-examples-649dc1c3f285
链接到下面的相关spring-cloud-网关类:
https://github.com/spring-cloud/spring-cloud-gateway/blob/main/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/route/builder/GatewayFilterSpec.java https://github.com/spring-cloud/spring-cloud-gateway/blob/main/spring-cloud-gateway-server/src/main/java/org/springframework/cloud/gateway/filter/factory/RewritePathGatewayFilterFactory.java