【发布时间】:2017-09-14 21:43:45
【问题描述】:
TLDR 是否可以在有人阅读 WSDL 内容时为 IP 地址(例如 0.0.0.0:8080/services 或 SERVER_1)或任何其他属性创建“别名”?类似于:
<entry key="org.apache.cxf.endpoint.private" value="true"/>
对于服务列表,保持功能不变但隐藏服务列表。
如果是,怎么做?如果没有,有没有办法在不使用@XmlTransient 的情况下隐藏它,因为如果我们使用它,据我了解,程序甚至不会映射这个元素,因此不再工作。
我正在使用 Spring 和 JAX-RS 处理 SOAP 服务。
我们正在保护我们的应用程序,经过道德黑客测试,结果表明我们在我们的 URL 上暴露了服务和生产 IP 地址。
我们能够从 Web 视图中隐藏服务列表,例如,如果我们访问 http://localhost:8080/foo/services,我们会得到以下文本:
No services have been found.
这很好,我们通过关注this answer 完成了它,但不是在cxf-servlet.xml 文件上,而是在applicationContext-{moduleName}.xml 文件上。
现在,如果我们知道或可以访问任何 WSDL 路径,我们仍然可以看到 WSDL 内容(包括生产 IP 地址),例如,如果我们输入:
http://localhost:8080/foo/services/bar?_wsdl
我们有一个类似的定义如下(出于安全原因,我对其进行了编辑):
<application
xmlns="http://wsdl.dev.java.net/2009/02"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<grammars/>
<resources base="http://localhost:8080/foo/services/bar">
<resource path="/VX">
<resource path="/anotherPath">
<method name="POST">
<request>
<representation mediaType="application/x-www-form-urlencoded">
<param name="someParam" style="query" type="xs:string"/>
</representation>
</request>
<response>
<representation mediaType="application/json">
<param name="anotherParam" style="plain" type="xs:string"/>
</representation>
</response>
</method>
</resource>
</resource>
</resources>
</application>
我怎么能,例如在运行时编辑属性
<resources base="http://localhost:8080/foo/services/bar">
类似
<resources base="SERVER_1">
所以,我们在内部知道SERVER_1 有什么 IP 地址,但设法到达那里的人不知道,换句话说,我如何为 IP 地址创建别名并使用它而不是真实 ip地址呢?
这是因为我们有大约 10 台服务器,每台都有不同的 IP 地址,如果我们需要进行一些生产调试,我们需要知道我们在哪个服务器中,所以我们希望避免隐藏整个 WSDL 内容(据我所知可以做到,因为模块有这个配置)。
我知道我可以使用@XmlTransient 注释,但按照docs:
防止将 JavaBean 属性/类型映射到 XML 表示。
因此,据我了解,如果我在包含 IP 地址的属性上使用此注释,那么它将不再起作用。
如果这是不可能的,您还有哪些其他建议来解决这个特殊情况?
我们使用自上而下的方法创建服务(即,我们获得了 WSDL,我们使用 wsdl2java 从中创建 Java 对象 + 服务接口)
【问题讨论】:
-
我假设您正在使用自下而上的方法创建服务?
-
@Namphibian 你说的“自下而上方法”是什么意思?对不起,我不明白你指的是什么。服务已经开发好了,我只是给这个系统一些维护......
-
自上而下与自下而上是开发 WSDL 文件时的两种不同策略,但在您的情况下,您正在维护它,因此注释无效。
-
@Namphibian 感谢澄清,我刚刚搜索过,是的,我们使用自顶向下的方法,给出了 WSDL,然后我们使用工具生成 Java 类和接口,那么我们就实现接口的服务...
标签: java spring web-services soap wsdl