簡體   English   中英

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

[英]How to configure Spring HATEOAS behind proxy?

我有 Spring Data Rest 和 Hateoas 作為我的支持。 它在代理后面。

后端網址: backend.com

代理網址: proxy.com

當我查詢代理 url 時,例如http://proxy.com/items/1 ,我得到一個帶有域backend.com href鏈接的響應。 我需要域是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鏈接proxy.com

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

另請參閱其他 X-Forwarded-* headers ,它們也受支持。

受到 Cyril server.use-forward-headers評論的啟發,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。

參考

盡管 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 方面修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM