当前位置: 首页 > 知识库问答 >
问题:

是否可以使用spring云更改网关上的服务endpoint路径

陶健
2023-03-14

我在本地计算机上有一个运行的api,url为http://localhost:8080/gnk-债务/服务/纳税人债务。我希望这个api可以通过带有url的网关访问http://localhost:8243/gnk/service/phystaxpayer/debt/v1.为此,首先在属性文件中设置端口。但我无法为apiendpoint设置自定义url。我正在尝试使用spring cloud编写一个简单的网关,其配置如下:

@Configuration
public class SpringCloudConfig {
@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder routeLocatorBuilder)
{
    return routeLocatorBuilder.routes()
            .route("gnkTaxpayerDebt", rt -> rt.path("/gnk-debt/**")
                    .uri("http://localhost:8080/"))
            .build();

}
}

但最后,网关apiendpoint可用于:http://localhost:8243/gnk-债务/服务/纳税人债务。

我好奇的问题是,如果可以将网关apiendpoint更改为:http://localhost:8243/gnk/service/phystaxpayer/debt/v1

编辑

正如斯宾塞·吉布(spencergibb)提到的,有一些选择可以做到这一点。我从RewritePath开始,随后我的配置更改如下:

@Bean
public RouteLocator gatewayRoutes(RouteLocatorBuilder routeLocatorBuilder)
{
return routeLocatorBuilder.routes()
            .route("gnkTaxpayerDebt", rt -> rt.path("/gnk/**")
                    .filters(f->f.rewritePath("/gnk/service/phystaxpayer/debt/v1(?<remains>.*)","/${remains}"))
                    .uri("http://localhost:8080"))
            .build();

}

最后,我可以访问我的网关endpointhttp://localhost:8243/gnk/service/phystaxpayer/debt/v1/gnk-实际纳税人债务/gnk/服务/实际纳税人债务

如何将最终endpoint更改为:http://localhost:8243/gnk/service/phystaxpayer/debt/v1

共有1个答案

郁承运
2023-03-14

设置您自己的endpoint的方法之一是创建一个GlobalFilter,您可以在其中更改ServerWebExchange eUtils附带的属性“GATEWAY_REQUEST_URL_ATTR”。您只需将endpoint设置如下

exchange.getAttributes().put(GATEWAY_REQUEST_URL_ATTR, yourEndpoint);
 类似资料:
  • 我使用Spring创建微服务。我使用Eureka进行服务发现,使用Zuul进行路由。现在我想切换到Spring Cloud Gateway(因为它的非阻塞特性),但是我没有找到自动路由到每个Eureka服务的方法。 例如,如果一个服务'eureka-client'注册到了Eureka,那么Zuul本身就为这个服务提供了类似于localhost:8762/eureka-client的路径。使用Spr

  • 我在这里学习Web Push,然后成功地一步一步地构建示例通知Web应用程序,使用Push Companion,现在对于服务器端,我能够将消息发送到“fcm.googleapis.com”,然后任何订阅该endpoint(fcm.googleapis.com)的客户端都可以在网页关闭时收到通知。这很好,但我担心的是商业案例,出于安全原因,不可能将敏感数据发送到公司的开放endpoint,例如“fc

  • 我正在尝试让Spring Cloud Gateway应用程序自动刷新它的路由配置yml。我已经能够设置一个云配置服务器来托管路由YAML,并使Spring云网关能够通过的用法自动刷新其配置。但是,这需要两个正在运行的应用程序,我们希望尽量减少支持这一需求所需的额外服务器的数量。 Spring Cloud Config Server文档建议任何引导应用程序都可以通过注释嵌入配置服务器:https:/

  • 我一直在试图找到一个与eureka服务器集成的spring cloud gateway的运行示例,以及一些Hystrix示例,但到目前为止我还没有找到。有什么地方可以找到它吗?我真的很想看到spring cloud gateway投入使用,取代我目前的Zuul API服务。 谢谢!

  • 我有一个字符串字段,它可能在前导和尾随处包含空白。我想修剪这些空白并使用返回修剪后的文本。如果文本为空,我想返回null。 当查看此链接上显示的实现示例时,我不确定如何创建一个获取字符串并返回字符串的方法,而不是创建方法。那么,如何根据给定的场景实现这种方法呢?

  • Java 14 版本: 版本: 现在我想将安全性集成到我的网关和所有下游微服务中。最终,我决定使用Firebase作为身份提供商(IDP)。我的Angular应用程序将从Firebase获得JWT令牌,并在每个请求中发送到云网关。因此,网关将开始只充当资源服务器,仅此而已。 下面是我如何尝试的。设置和同时充当资源服务器。在这里很好地解释了Spring安全文档。 下面是我的配置 和applicati