我需要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
答案 0 :(得分:1)
你可以这样做
override var keyCommands: [UIKeyCommand]?
{
return [UIKeyCommand(input: "\t", modifierFlags: [], action: #selector(tabPressed))]
}
@objc func tabPressed()
{
// do stuff
}