微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法使用上下文路径将请求转发到URI

如何解决无法使用上下文路径将请求转发到URI

我无法将请求转发到具有contextpath的URI。

例如,我请求使用以下内容的Spring云网关服务器

http://localhost:1010/mygateway/server/date

我希望它能转发到

http://myapiserver.com/xyzapi/v1/server/date

但是它给了我404

@Bean
public RouteLocator customrouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
            .route("api-server-date",r -> r.host("**")
                    .and()
                    .path("/mygateway/server/date")
                    .filters(f -> f.stripPrefix(1))
                    .uri("https://myapiserver.com/xyzapi/v1"))
            .build();
}

当我将配置更改为此时,它将起作用

@Bean
public RouteLocator customrouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
            .route("api-server-date",r -> r.host("**")
                    .and()
                    .path("/mygateway/xyzapi/v1/server/date")
                    .filters(f -> f.stripPrefix(1))
                    .uri("https://myapiserver.com"))
            .build();
}

我不知道我提供的配置错误。应该可以。

我只想使用

https://myapiserver.com/xyzapi/v1

作为我的URI。意味着到我的Spring Cloud Gateway服务器的所有传入流量都应在附加传入URL后转发到该URL

提示出什么问题了?还是Spring Cloud Gateway无法实现?

解决方法

我认为您想要的(看在线样本)是:

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
  String requestHandlerUrl = "http://myapiserver.com/xyzapi/v1/server/date";
  return builder.routes()
          .route("api-server-date",r -> r.host("**")
             .and()
             .path("/mygateway/server/date")
             .filters(f -> f.stripPrefix(1))
             .uri(requestHandlerUrl)
          .build();
}

...,以便将对应用程序部署到的任何主机的请求转发/传递到requestHandlerUrl作为目的地。

看起来/mygateway/server/date是您实际要处理请求的URL的“快捷方式”或别名。

此处有一些示例:https://cloud.spring.io/spring-cloud-gateway/multi/multi__configuration.html#_fluent_java_routes_api

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。