我有Hateoas的Spring Data Rest作为我的支持。它是代理人的背后。
后端网址:backend.com
代理网址:proxy.com
当我查询代理网址时,例如http://proxy.com/items/1
,我得到href
链接域backend.com
的回复。我需要域名为proxy.com
。
从Spring-Boot 2.1 / Spring 5.1开始,Spring将处理X-Forwarded- *的责任从Spring HATEOAS转移到Spring MVC。
https://jira.spring.io/browse/SPR-16668
您现在需要注册过滤器bean。
最小的实施:
@Bean
FilterRegistrationBean<ForwardedHeaderFilter> forwardedHeaderFilter()
{
FilterRegistrationBean<ForwardedHeaderFilter> bean = new FilterRegistrationBean<>();
bean.setFilter(new ForwardedHeaderFilter());
return bean;
}
确保您的代理正在将X-Forwarded-Host: proxy.com
标头添加到传递给backend.com
的请求中。然后Spring Hateoas将使用proxy.com
自动生成链接href。
X-Forwarded-Host
可以包含端口。
另请参阅other X-Forwarded-* headers,它们也受支持。
虽然Mariano已经回答了这个问题,但我想补充说它适用于Spring Boot。但是,如果您不使用Spring Boot,而是在J2EE容器(如我的)中部署的传统Web应用程序中使用Spring 5.1.X,则需要在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>
除此之外,您还需要将Hateoas升级到版本0.25.1,此问题已从Hateoas方面修复。