在具有上下文路径的 Spring 启动应用程序中使用 API 网关时,HATEOAS 路径无效
HATEOAS paths are invalid when using an API Gateway in a Spring Boot app with context-path
我在 zuul 网关后面有一个 spring boot 2.0.2 web 应用程序。我的应用程序使用 spring hateoas links。我的应用程序还设置了上下文路径让我们说 xxx。
通过zuul网关查询时,hateoas link失效。原因如下:
假设打个电话 https://localhost/serviceName/service-context-path/path。我会要求我的 heteoas links 变成即
https://localhost/serviceName/service-context-path/path/
但是,这些 link 变为:https://localhost/service-context-path/path/.
我已经搜索并在堆栈溢出中找到了这个 link (HATEOAS paths are invalid when using an API Gateway in a Spring Boot app)
事实上,默认情况下 add-proxy-headers true 发送 X-FORWARDED-PREFIX(所有主机等),我猜这是社区打算解决这个问题。但是...当我调试我的应用程序时,我使用了此方法 org.springframework.web.servlet.support.ServletUriComponentsBuilder#fromContextPath,java doc 部分如下:
从 4.3.15 开始,此方法将 contextPath 替换为值 "X-Forwarded-Prefix" 而不是前置,因此与 {@code ForwardedHeaderFiller} 对齐。
这意味着以下内容,当存在 X-FORWARDED-PREFIX 时,应用程序上下文将从 zuul 的前缀(即 serviceName)替换。我猜 uul 开发人员在他们这边不知道应用程序上下文,而在另一边,org.springframework.web.servlet.support.ServletUriComponentsBuilder#fromContextPath 与相应的规范兼容。
问题:我该如何进行?当我使用 zuul
时,我当然希望我的 hateoas links 是正确的
我的问题是这里没有解决方案。
正确的方法是避免使用 zuul 并移动到 Spring 云网关。
我在 zuul 网关后面有一个 spring boot 2.0.2 web 应用程序。我的应用程序使用 spring hateoas links。我的应用程序还设置了上下文路径让我们说 xxx。
通过zuul网关查询时,hateoas link失效。原因如下: 假设打个电话 https://localhost/serviceName/service-context-path/path。我会要求我的 heteoas links 变成即 https://localhost/serviceName/service-context-path/path/ 但是,这些 link 变为:https://localhost/service-context-path/path/.
我已经搜索并在堆栈溢出中找到了这个 link (HATEOAS paths are invalid when using an API Gateway in a Spring Boot app) 事实上,默认情况下 add-proxy-headers true 发送 X-FORWARDED-PREFIX(所有主机等),我猜这是社区打算解决这个问题。但是...当我调试我的应用程序时,我使用了此方法 org.springframework.web.servlet.support.ServletUriComponentsBuilder#fromContextPath,java doc 部分如下: 从 4.3.15 开始,此方法将 contextPath 替换为值 "X-Forwarded-Prefix" 而不是前置,因此与 {@code ForwardedHeaderFiller} 对齐。
这意味着以下内容,当存在 X-FORWARDED-PREFIX 时,应用程序上下文将从 zuul 的前缀(即 serviceName)替换。我猜 uul 开发人员在他们这边不知道应用程序上下文,而在另一边,org.springframework.web.servlet.support.ServletUriComponentsBuilder#fromContextPath 与相应的规范兼容。
问题:我该如何进行?当我使用 zuul
时,我当然希望我的 hateoas links 是正确的我的问题是这里没有解决方案。 正确的方法是避免使用 zuul 并移动到 Spring 云网关。