Spring Cloud Gateway - префикс полосы, если существует - PullRequest
0 голосов
/ 03 декабря 2018

Мне нужен 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"))

1 Ответ

0 голосов
/ 08 января 2019

вы можете сделать так

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