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

Spring Boot Zuul hateoas REST响应在资源中有直接的服务链接

夹谷琨
2023-03-14

我有Zuul Eureka Spring Boot服务endpointHateoas响应配置。当我通过Zuul网关访问服务时,响应中的资源链接是指向服务endpoint的直接链接,它们不应该是网关链接吗?我错过了什么?

网关endpoint:http://localhost:8762/catalog/products/10001直接服务endpoint:http://localhost:8100/products/10001

应用Zuul的属性

spring.application.name=zuul-server
eureka.client.service-url.default-zone=http://localhost:8761/eureka/

# Map paths to services
zuul.routes.catalog-service=/catalog/**
zuul.addProxyHeaders=true

网关终结点上的实际响应:http://localhost:8762/catalog/products/10001

{
  "title" : "The Title",
  "description" : "The Description",
  "brand" : "SOME BRAND",
  "price" : 100,
  "color" : "Black",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8100/products/10001"
    }
  }
}

预期响应应在href中包含网关URL

{
  "title" : "The Title",
  "description" : "The Description",
  "brand" : "SOME BRAND",
  "price" : 100,
  "color" : "Black",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8762/catalog/products/10001"
    }
  }
}

共有2个答案

养聪
2023-03-14

虽然@尼克希尔说他只是通过添加@Bean来修复,但在我的情况下恰恰相反:

我刚刚添加了转发头策略:FRAMEWORK(目前,server.use转发头被弃用),它以这种方式为我工作。

谢谢@Zipster!

附加信息:

属性服务器。use forward Header接受三个可能的值:

  • 没有
  • 本地人
  • 框架

我测试了这三个选项以检查差异。

My Zuul gateway(端口8080)路由的配置如下:

zuul:
  prefix: /api/v0
  sensitive-headers: Cookie,Set-Cookie # Allow Authorization header forwarding
  routes:
    api-v0-questions:
       path: /questions/**
       service-id: api-v0-questions
       strip-prefix: false

NATIVE-URL指向网关并去除/api/v0(顶部前缀):

"_links": {
  "self": {
    "href": "http://localhost:8080/questions/5f6fa0300ec87b34b70393ca"
  }

框架-URL指向网关,不删除 /api/v0前缀:

"_links": {
  "self": {
    "href": "http://localhost:8080/api/v0/questions/5f6fa0300ec87b34b70393ca"
  }

无-URL指向服务,就像根本不添加属性一样:

"_links": {
  "self": {
    "href": "http://localhost:8081/questions/5f6f96ba0ec87b34b70393b2"
  }
卢景澄
2023-03-14

我已经得到了这个问题,并通过github上的这篇帖子解决了它

要点是

Spring靴

@Bean
ForwardedHeaderFilter forwardedHeaderFilter() {
    return new ForwardedHeaderFilter();
}

Spring靴

server.use-forward-headers=true
 类似资料:
  • 了解如何跨云文档使用链接资源,以提高各工作流程的工作效率。 随着设计界面的不断丰富,设计人员需要轻松协作来创建和维护一致的设计。借助链接资源,设计人员可以在云文档中创建一个基础的上下文库,包含一致扩展其设计所需的所有资源(颜色、字符样式和组件)。 借助最新版本的 Adobe XD,您不仅可以轻松共享和使用组件(以前称为符号),还可以轻松共享和使用颜色及字符样式,只需几个简单的步骤。如果您要与团队分

  • 资源链接 论文 中本聪 / 比特币:一种点对点的电子现金系统; 闪电网络:The Bitcoin Lightning Network: Scalable Off-Chain Instant Payments; 项目工具 blockchain.info:比特币信息统计网站; bitcoin.it:比特币 wiki,相关知识介绍; 以太坊项目:https://www.ethereum.org; 以太坊

  • 这是更新IDE后出现的错误 Android资源链接失败i:\Android\AndriodStudioProjects\MedicalApp\App\Build\Intermediates\Incremental\MergedebugResources\Merged.dir\values-v28\values-v28.xml:7:错误:找不到资源Android:attr/DialogCornerR

  • 我最近开始使用WebFlux,需要关于如何链接多个服务和聚合响应的建议。这4个服务及其响应POJO类似于以下示例: 以及4项服务的签名: 因此,需要为Flux中的每个响应1调用service2,为每个响应2调用service3。模型之间的关系是: 聚合的最终响应应类似于(JSON): 所以首先我需要调用Service1,然后为每个响应调用service2,然后为每个响应调用service3(由se

  • 我正在使用Dropwizard 8.2.0构建REST服务。我有2个资源:FolderResource和FileResource: 我做错了什么?

  • 官方网站 Docker 官方主页:https://www.docker.com Docker 官方博客:https://blog.docker.com/ Docker 官方文档:https://docs.docker.com/ Docker Hub:https://hub.docker.com Docker 的源代码仓库:https://github.com/moby/moby Docker 发布