我们将应用程序从传统的 WAS8 迁移到了IBM Liberty 。我们的WSDL保持不变。它们包含如下所示的模式:
<wsdl:types>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://my.namespace.com/08/XX/YY" schemaLocation="MySchema.xsd" />
</xsd:schema>
</wsdl:types>
当我的应用程序正在运行并且我输入公开的WSDL的URL(https://example.com/myInterface?wsdl)时, schemaLocation 将指向该架构文件的实际URL,并且也可以访问。看起来像这样:
<xsd:import namespace="http://my.namespace.com/08/XX/YY" schemaLocation="https://ip.of.my.appserver:9080/myInterface?xsd=MySchema.xsd"/>
在传统WAS 上, schemaLocation 只是文件名。而且该文件也不会公开(使用提供的URL Liberty进行尝试)。
如何禁用它,以使该架构文件不再在Liberty上公开?
这是我在代码中必须要做的事情吗? ( WSDL位置由 @Webservice 注释设置)。
还是可以在 server.xml 中设置的内容?
更新:我们进行了一些挖掘,并在TCP转储中看到 HTTP标头 host 被设置为上述IP地址,港口。这样便得到了我们在WSDL中看到的URL。现在,Apache Web服务器中有一个开关,可以保留最初调用的负载均衡器的主机。但是现在WSDL条目看起来像这样:
<xsd:import namespace="http://my.namespace.com/08/XX/YY" schemaLocation="https://myLoadBalancer:80/myInterface?xsd=MySchema.xsd"/>
您可以看到 URL 现在是负载均衡器的一部分,但端口却以某种方式设置为 80 。 这是从哪里来的?在我们的server.xml中,没有这样的设置。
尽管这不是我的问题的解决方案,但这是一些用户对此问题的快速解决方案。 如果我们使用端口443 在Web服务器中硬设置 host 标头,则它可以工作(端口:80消失了),但是我想知道Liberty在哪里得到的端口。
但是我的第一个问题仍然存在:如何禁用对架构文件的路径公开?
UPDATE2::经过进一步调查,server.xml中的以下条目解决了端口问题:
<webContainer extractHostHeaderPort="true" trustHostHeaderPort="true" httpsIndicatorHeader="X-Forwarded-Proto"/>
我们将研究webcontainer配置的其他属性以完全隐藏路径。