我有两个spring-boot应用程序,其中一个充当API网关(如这里的spring示例所讨论的)。与第一个连接的另一个是使用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选项来禁用这种行为,而只是通过主机调整将hateoas uri保留在原位。或者有没有一种方法可以让我的服务在网关后面连接到/而不是/profiles的默认资源endpoint(在这种情况下),这样可以避免添加不需要的路径。
谢谢你!
Zuul转发到/profiles上下文路径。
尝试将其设置为配置:
zuul:
routes:
profiles:
path: /profiles/**
url: http://localhost:8083/
我有完全相同的问题。更改您的配置如下:
zuul:
routes:
profiles:
path: /profiles/**
url: http://localhost:8083
stripPrefix: false
这会将所有发送到与“/profiles/**”匹配的网关的请求路由到您的后端服务器“http://localhost:8083”并保留前缀(在您的例子中是“/profiles”,因为它与路由匹配)。
Zuul或Spring-Cloud将“X-Forwarded-Host”头添加到所有转发的请求中,Spring-hateoas会尊重并适当地修改链接。引用Spring-Cloud文档:
默认情况下,X-Forwarded-Host标头添加到转发的请求中。若要将其关闭,请设置zuul.addProxyHeaders = false。默认情况下,前缀路径被剥离,对后端的请求获得一个头“X-Forwarded-Prefix”(上面示例中的“/myusers”)。
您可以尝试推荐的修复方法,即将zuul.addProxyHeaders=false设置为
我有一个springboot应用程序,我试图使用ByteBuddy来测试它。我遇到了类路径问题,我无法理解。 首先,以下是关于这方面的其他文献: https://github.com/raphw/byte-buddy/issues/473 这里需要注意的一点是,如果我使用IntelliJ运行应用程序,它不会使用uber-jar,而是通过main类运行,其中有一堆JAR作为类路径参数。 由于这种差异
我已经使用Spring初始值设定项、嵌入式Tomcat、Thymeleaf模板引擎和作为可执行JAR文件的包生成了一个Spring Boot web应用程序。 使用的技术: Spring启动2.0.0。M6,Java8, Maven 这是我的安全配置 在我的 但当我在http://localhost:1234/iberiaWebUtils,而不是去http://localhost:1234/ibe
我是kubernetes的新手,需要在openshift平台上使用k8s confimap将springboot应用程序的属性文件外部化。我已将属性文件保存在git repo中,作为“greeter.message=Spring Bootmyapplication.properties已在库伯内特斯上挂载为卷!”并使用“oc create confimap myconfig--from-file=
我创建了一个节点。js(使用ExpressJS)微服务,并使用向Eureka Discovery Server注册。 我已经在Eureka注册了一些基于Java的微服务,并通过Zuul API网关使用它们。 当我尝试调用节点上的特定endpoint时。js微服务通过API网关,抛出错误: 注意:是我的演示服务应用程序的名称。
换句话说,我的API网关将使用API网关中定义的相同的资源处理对的请求和对的另一个请求,而不必在API网关中定义和资源。