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

问题描述 投票:9回答:3

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

后端网址:backend.com

代理网址:proxy.com

当我查询代理网址时,例如http://proxy.com/items/1,我得到href链接域backend.com的回复。我需要域名为proxy.com

spring rest spring-data-rest hateoas spring-hateoas
3个回答
19
投票

从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;
}

10
投票

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

X-Forwarded-Host可以包含端口。

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


0
投票

虽然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方面修复。

© www.soinside.com 2019 - 2024. All rights reserved.