Мне нужен Spring Cloud Gateway для маршрутизации запроса в микросервис на основе заголовка Host
или префикса пути.В любом случае префикс пути должен быть удален из пути, но только если он установлен.
Я придумал следующий код, в котором я считаю префикс только "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
с хостомзаголовок не установлен, потому что Spring считает /calls
префиксом и удаляет его, что приводит к пустому пути./calls/calls
путь с заголовком Host
выполнен успешно, поскольку 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"))