我有Hateoas的Spring Data Rest作为我的支持。它是代理人的背后。
后端网址:backend.com
代理网址:proxy.com
当我查询代理网址时,例如http://proxy.com/items/1
,我收到了与域href
的{{1}}个链接的回复。我需要将域名backend.com
。
答案 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方面解决。