gpt4 book ai didi

spring - 在 Spring Boot 应用程序中使用 API 网关时,HATEOAS 路径无效

转载 作者:行者123 更新时间:2023-12-02 10:02:28 25 4
gpt4 key购买 nike

我有两个 Spring Boot 应用程序,其中一个充当 API 网关(如此处所述 Spring Example )。另一个连接到第一个的是使用 spring-data-rest (spring-data-neo4j-rest) 公开配置文件服务。

第一个应用程序在端口 8080 上启动,并使用 zuul 将请求路由到第二个应用程序,如下所示:

zuul:
routes:
profiles:
path: /profiles/**
url: http://localhost:8083/profiles/

一切正常,请求 http://localhost:8080/profiles正在从第二个应用程序提供服务。但问题是响应中的 HATEOAS 链接不正确。调用第二个服务的响应是正确的:

{
"_links": {
"self": {
"href": "http://localhost:8083/profiles{?page,size,sort}",
"templated": true
},
"search": {
"href": "http://localhost:8083/profiles/search"
}
},
"_embedded": {
"profiles": [
{
"name": "Andrew Rutter",
"_links": {
"self": {
"href": "http://localhost:8083/profiles/0"
}
}
},
{
"name": "Andrew Rutter",
"_links": {
"self": {
"href": "http://localhost:8083/profiles/1"
}
}
}
]
},
"page": {
"size": 20,
"totalElements": 2,
"totalPages": 1,
"number": 0
}
}

但是当这返回到我的 API 网关时,链接将被重写为

{
"name": "Andrew Rutter",
"_links": {
"self": {
"href": "http://localhost:8080/profiles/profiles/0"
}
}
}

这是网关路径别名加上实际服务基础 Uri。我是否缺少一个 zuul 选项来禁用该行为,并通过主机调整将 hatoas uri 保留在适当的位置。或者有没有办法让我的网关后面的服务连接到/而不是/profiles 的默认资源端点(在本例中),这将避免添加不需要的路径。

谢谢!

最佳答案

Zuul 或 Spring-Cloud 将“X-Forwarded-Host” header 添加到所有转发的请求中,Spring-hateoas 会尊重并适当修改链接。引用 Spring-Cloud 文档:

The X-Forwarded-Host header added to the forwarded requests by default. To turn it off set zuul.addProxyHeaders = false. The prefix path is stripped by default, and the request to the backend picks up a header "X-Forwarded-Prefix" ("/myusers" in the examples above).

您可以尝试建议的修复,即设置 zuul.addProxyHeaders=false

关于spring - 在 Spring Boot 应用程序中使用 API 网关时,HATEOAS 路径无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30584242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com