[英]How to configure MappingJackson2HttpMessageConverter registered by 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.