我们最近升级到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,它通过https://stackoverflow.com/a/53269319提供了一个临时解决方案,建议使用FilterRegistrationBean 似乎FilterRegistrationBean作为Spring Boot的一部分提供,我们不使用它,因此解决方案是不可能的。 所以我尝试直接在应用程序web.xml中添加一个新的过滤器ForwardedHeaderFilter。但是,这会导致重定向URL与HTTPS转换为HTTP时出现问题。 提到的另一个解决方案是升级到0.25.1并使用Spring属性server.use-forward-headers = true。升级已完成,但由于我们使用Spring XML进行配置,因此无法找到此属性的XML等价物。 对此问题的任何帮助都将深表感谢。
在完成源代码并尝试一些不同的组合后找到答案。
问题中提到的问题已在Hateoas版本0.25.1中修复,因此解决方案的一部分是将Hateoas升级到0.25.1。
另一部分受到问题中给出的SO链接的启发,但在我的情况下它不起作用,因为它仅适用于Spring Boot。由于我们不使用Spring Boot,但我们有一个使用J2EE容器运行的传统Web应用程序,因此解决方案是将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>