如何在代理后面配置Spring HATEOAS?

时间:2015-05-03 22:37:10

标签: spring rest spring-data-rest hateoas spring-hateoas

我有Hateoas的Spring Data Rest作为我的支持。它是代理人的背后。

后端网址:backend.com

代理网址:proxy.com

当我查询代理网址时,例如http://proxy.com/items/1,我收到了与域href的{​​{1}}个链接的回复。我需要将域名backend.com

4 个答案:

答案 0 :(得分:17)

从Spring-Boot 2.1 / Spring 5.1开始,Spring将处理X-Forwarded- *的职责从Spring HATEOAS转移到Spring MVC。

https://jira.spring.io/browse/SPR-16668

您现在需要注册一个滤豆。

最低实现:

@Bean
FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter()
{
    FilterRegistrationBean<ForwardedHeaderFilter> bean = new FilterRegistrationBean<>();
    bean.setFilter(new ForwardedHeaderFilter());
    return bean;
}

答案 1 :(得分:10)

确保您的代理正在向传递给proxy.com请求添加X-Forwarded-Host: proxy.com标头。然后Spring Hateoas会自动生成backend.com的链接href。

proxy.com可以包含端口。

另请参阅other X-Forwarded-* headers,这些也受支持。

答案 2 :(得分:2)

受Cyril Gambis的评论启发,Spring提供了一个属性server.use-forward-headers,该属性至少存在于1.3.0.RELEASE版本中。从Spring Boot 2.2.0.RELEASE开始,该属性已弃用,请改用server.forward-headers-strategy

当您使用Spring Data Rest时,建议您设置server.forward-headers-strategy = framework,然后Spring Hatoaes借助x-forwarded-*标头为href生成代理URI。

参考

答案 3 :(得分:0)

尽管Mariano回答了这个问题,但我想补充一点,它适用于Spring Boot。但是,如果您不使用Spring Boot而是在J2EE容器(如我的容器)中部署的传统Web应用程序中使用Spring 5.1.X,则需要向Web应用程序的web.xml中添加一个过滤器,如下所示:< / p>

    <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>

除此之外,您还需要将Hateoas升级到0.25.1版本,该版本已从Hateoas方面解决。