Spring Cloud Gateway-带前缀(如果存在)

时间:2018-12-03 11:43:49

标签: java spring spring-cloud spring-cloud-gateway

我需要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的请求成功,但是设置了Host标头的/calls则失败,因为Spring认为/calls是前缀,并删除了它,从而导致空的路径。标头为/calls/calls的{​​{1}}路径成功,因为Spring仅删除了第一个Host路径段。

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

ps我在考虑每项服务的两条路线,但虽然达到了目标,但看起来并不好:

calls

1 个答案:

答案 0 :(得分:1)

你可以这样做

override var keyCommands: [UIKeyCommand]? 
{
    return [UIKeyCommand(input: "\t", modifierFlags: [], action: #selector(tabPressed))]
}

@objc func tabPressed() 
{
    // do stuff
}