如何在 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 配置中。
我公司使用 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 配置中。