升级后使用内部主机名而不是转发主机生成的 Hateoas 链接

Hateoas links generated with internal hostname instead of forwarded host after upgrade

我们最近升级到 Spring 5.1.3 和 Hateoas 0.25,并开始面临生成链接的问题。
假设我们的域是 xyz.com,所有通过负载均衡器到达任何子系统的请求都被转发到主系统,其中生成的 hateoas 链接与​​ xyz.com 域有链接。
但是,升级后,为此类请求生成的 hateoas 链接现在具有内部主机名,例如。 host5678.internaldomain.com.
我遇到了一个为此记录的问题:https://github.com/spring-projects/spring-hateoas/issues/753 where it provided an interim solution via 建议使用 FilterRegistrationBean
FilterRegistrationBean 似乎作为 Spring Boot 的一部分可用,我们不使用它,因此解决方案是不可能的。
所以我尝试直接在应用程序中添加一个新的过滤器 ForwardedHeaderFilter web.xml。但是,这会导致将 HTTPS 转换为 HTTP 的重定向 URL 出现问题。
提到的另一个解决方案是升级到 0.25.1 并使用 Spring 属性 server.use-forward-headers=true。升级已完成,但我找不到与此 属性 等效的 XML,因为我们正在使用 Spring XML 进行配置。
在此方面的任何帮助将不胜感激。

在查看源代码并尝试一些不同的组合后找到了答案。

问题中提到的问题已在 Hateoas 版本 0.25.1 中修复,因此解决方案的一部分是将 Hateoas 升级到 0.25.1。

另一部分的灵感来自问题中给出的 SO link,但在我的情况下它并没有按原样工作,因为它仅适用于 Spring 引导。由于我们不使用 Spring 引导,但我们有一个传统的 Web 应用程序 运行 J2EE 容器,解决方案是将 ForwardedHeaderFilter 作为 Web 应用程序 web.xml 的一部分包含在内,如下所示:

    <filter>
    <filter-name>forwardedHeaderFilter</filter-name>
    <filter-class>org.springframework.web.filter.ForwardedHeaderFilter</filter-class>
    <init-param>
        <param-name>relativeRedirects</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>forwardedHeaderFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>