TLDR是否有可能创建一个IP地址(如0.0.0.0:8080/services
的SERVER_1
)或在WSDL内容,同时有人在阅读它的任何其他财产的“别名”?类似:Java的WSDL修改或隐藏Web视图的某些属性
<entry key="org.apache.cxf.endpoint.private" value="true"/>
对于服务列表中,保持功能不变,但隐藏的服务列表。
如果是,如何?如果没有,有没有办法隐藏它,而不使用@XmlTransient
,因为如果我们使用它,并从我的理解,程序甚至不会映射此元素,因此不再工作。
我正在使用使用Spring和JAX-RS的SOAP服务。
经过道德黑客测试,我们正在保护我们的应用程序,结果表明我们在我们的URL上公开了服务和生产IP地址。
我们能够隐藏网络视图中的服务列表,例如,如果我们访问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">
所以,我们内部知道什么IP地址不SERVER_1
了,但外面的人管理到那里不,换句话说,我怎么可能创建的IP地址的别名和使用它而不是真正的IP地址呢?
这是因为我们有大约10台服务器,每台服务器都有不同的IP地址,如果我们需要做一些生产调试,我们需要知道我们在哪个服务器,所以我们希望避免隐藏整个WSDL内容(因为我知道它可以完成,因为模块具有此配置)。
我知道我可以使用@XmlTransient
注解,但是作为每docs:
阻止将JavaBean属性/类型XML表示的映射。
所以,在我的理解中,如果我在包含IP地址的属性上使用这个注解,那么它将不再起作用。
如果这是不可能的,那么为了针对这种特殊情况制定解决方法,您还有哪些其他建议?
我们创建一个自上而下的方法的服务(即我们给出的WSDL,我们使用wsdl2java
来从它创建Java对象+服务接口)
我假设你正在用自下而上的方法创建服务? – Namphibian
@Nafphibian你的意思是“自下而上的方法”*?对不起,我没有得到你所指的。这些服务已经开发出来了,我只是给这个系统一些维护... – Frakcool
当开发WSDL文件时,自顶向下和自下而上是两种不同的策略,但是在您的情况下,您正在维护它,所以评论无效。 – Namphibian