代理

时间:2018-03-28 12:37:41

标签: spring apache tomcat proxy http-headers

我有外部服务:

https://domainx.com/path/a/to/my/app

通过代理和web服务,它在tomcat服务器上的Spring(Data Rest)应用程序中结束,公开在:

http://mytomcatserver:8080/this/is/my/app

此应用程序返回一个HAL-JSON响应,其中包含一个_links部分,指向自身和其他资源。例如:

{
    "id": "a_resource_001",
    "_links": {
        "self": {
            "href": "http://mytomcatserver:8080/this/is/my/app/res/a_resource_001"
        }
    }
}

在消费方面,这个链接当然不会有任何意义。

这已经解决了:在消费方面,某处增加了一个标题:

X-Forwarded-Host=domainx.com

然后结果变成了(自动感谢框架):

{
    "id": "a_resource_001",
    "_links": {
        "self": {
            "href": "https://domainx.com/this/is/my/app/res/a_resource_001"
        }
    }
}

链接已得到改进,但路径/上下文根仍然不匹配:

/path/a/to/my/app!= /this/is/my/app

所以,我想,是否有X-Forwarded-Path或类似的东西。我的应用程序框架(Tomcat,Spring或Spring Data Rest)拾取的一些标头,用于在JSON响应中构建url。 但不,没找到它。

有人知道如何解决这些问题。在我看来,我不是第一个处理这些东西的人。

是的,在这种情况下,使用相同的路径不是一种选择。 (当然,如果我将我的应用程序的context-root公开为/path/to/my/app,它会起作用。在这种情况下不是一个选项)

我想在Tomcat / Spring中有一个解决方案,其中一些标题可能会影响链接。 但我也认为这可以在Web服务器(apache)或代理设置中解决。

1 个答案:

答案 0 :(得分:0)

我对此有相同的问题。

使用Spring应用程序时,最简单的方法是将上下文路径设置为与代理相同。

还有获取x-forward-for信息的选项。这些必须从代理发送。

在应用程序端,您可以使用(在本例中为application.properties)

server.use-forward-headers=true server.servlet.context-path=/my/custom/context/path