【问题标题】:Hateoas links generated with internal hostname instead of forwarded host after upgrade升级后使用内部主机名而不是转发主机生成的 Hateoas 链接
【发布时间】:2019-07-23 16:39:07
【问题描述】:

我们最近升级到 Spring 5.1.3 和 Hateoas 0.25,并开始面临生成链接的问题。
假设我们的域是 xyz.com,通过负载平衡器到达任何子系统的所有请求都被转发到主系统,其中生成的 hateoas 链接与​​ xyz.com 域有链接。
但是,升级后,为此类请求生成的 hatoas 链接现在具有内部主机名,例如。 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。
对于这方面的任何帮助,我们将不胜感激。

【问题讨论】:

    标签: java spring spring-hateoas


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-05-21
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-31
      • 2012-12-13
      • 2021-11-22
      • 1970-01-01
      相关资源
      最近更新 更多