【问题标题】:Java WSDL modify or hide certain properties on Web ViewJava WSDL 修改或隐藏 Web 视图上的某些属性
【发布时间】:2017-09-14 21:43:45
【问题描述】:

TLDR 是否可以在有人阅读 WSDL 内容时为 IP 地址(例如 0.0.0.0:8080/servicesSERVER_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


【解决方案1】:

TLDR:使用 DNS 为您的 IP 地址分配名称。

我们正在保护我们的应用,经过道德黑客测试,结果 抛出我们正在公开服务和生产 IP 地址 我们的网址

您有一个 SOAP 服务。要使用它,需要知道端点的地址。所以无论如何你都会“暴露”它。不推荐Security through obscurity

所以,我们内部知道 SERVER_1 的 IP 地址是什么,但是人们 除了设法到达那里没有,换句话说我怎么能 为 IP 地址创建一个别名并使用它而不是真实 ip 地址呢?

这就是 DNS 的发明目的。 IP 地址的“别名”。将 IP 地址用于服务是不好的做法。所以设置一个 DNS(或使用主机文件)为每个 IP 地址分配一个名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    相关资源
    最近更新 更多