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

时间:2019-03-01 15:55:57

标签: java spring spring-hateoas

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

1 个答案:

答案 0 :(得分:0)

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

问题中提到的问题已在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>