如何在 spring-data-rest 链接中重写应用程序的基础 URL?

How do I rewrite the app's base URL in spring-data-rest links?

我公司使用 API 网关按如下方式转换 URL,同时修改主机名和资源的基本路径: https://apigateway.mycompany.com/myapp/foo -> https://myapp.mycompany.com/foo

在 Spring Data REST 中,应用程序想要使用 https://myapp.mycompany.com/foo 生成链接。我如何自定义应用程序以强制它为所有 rel 属性生成 API 网关链接?

我想更改链接的呈现方式而不 更改myapp.mycompany.com 服务器上这些资源的实际路径。我查看了有关自定义 rel 的文档部分,但它似乎并未涵盖此用例。

我该怎么办?

如果 Spring MVC 知道您的负载 balancer/proxy,它可以自动重写 Spring Data REST 中生成的 URL 和您自己的控制器(使用 MvcUriComponentsBuilder) 以反映原始请求 URL,包括方案、端口等。

有一个名为 ForwardedHeaderFilter 的 built-in Servlet 过滤器可以通过检查 well-known 转发 headers 例如 X-Forwarded-For 来为您处理此问题;如果你正在使用 Spring Boot,你可以设置 server.forward-headers-strategy = framework 来注册一个,或者你可以使用 @Import(ForwardedHeaderFilter.class) 创建一个 bean,然后 Boot 将应用于容器。如果您使用 Spring 不带引导的 MVC,请将此过滤器添加到您的 Servlet 配置中。