gpt4 book ai didi

java - Spring Cloud Gateway - 如果存在则去掉前缀

转载 作者:行者123 更新时间:2023-12-01 14:17:34 25 4
gpt4 key购买 nike

我需要 Spring Cloud Gateway 基于 Host 将请求路由到微服务 header 或路径前缀。在任何情况下,路径前缀都必须从路径中删除,但前提是它已设置。

我想出了以下代码,其中我认为只有“sip”是前缀:

public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route(r -> r.host("sip")
.or()
.path("/sip/**")
.filters(f -> f.stripPrefix(1))
.uri("http://sip:8080")
)
.build();
}

问题是 Spring 删除了路径的第一段,即使它不是前缀。

例如,路径为 /sip/calls 的请求成功,但 /calls Host header 设置没有,因为 Spring 认为 /calls一个前缀并将其删除,导致空路径。 /calls/calls路径与 Host header 成功,因为 Spring 仅删除第一个 calls路径段。

如何一起使用主机和路径,仅当前缀与定义的值匹配时才删除前缀?

ps 我正在考虑每个服务的两条路线,但它看起来并不好,尽管它实现了目标:
.route(r -> r.header("Host", "form").uri("http://form:8080"))
.route(r -> r.path("/form/**")
.filters(f -> f.stripPrefix(1))
.uri("http://form:8080"))

最佳答案

你可以这样做

.route(r -> r.host("sip")
.or()
.path("/sip/**")
.filters(f -> f.rewritePath("^/sip", ""))
.uri("http://sip:8080")

关于java - Spring Cloud Gateway - 如果存在则去掉前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53593164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com