Java WSDL 修改或隐藏 Web View 上的某些属性

标签 java spring web-services soap wsdl

TLDR 是否可以为 IP 地址创建“别名”(例如 0.0.0.0:8080/services 作为 SERVER_1 ) 或在有人阅读 WSDL 内容时的任何其他属性?类似于:

<entry key="org.apache.cxf.endpoint.private" value="true"/>

对于服务列表,保持功能不变但隐藏服务列表。

如果是,怎么办?如果没有,有没有办法在不使用 @XmlTransient 的情况下隐藏它,因为如果我们使用它,根据我的理解,程序甚至不会映射这个元素,因此不再工作。


我正在使用 Spring 和 JAX-RS 处理 SOAP 服务。

经过道德黑客测试后,我们正在保护我们的应用程序,结果表明我们在我们的 URL 上公开了服务和生产 IP 地址。

我们能够在 Web View 中隐藏服务列表,例如,如果我们访问 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 :

Prevents the mapping of a JavaBean property/type to XML representation.

因此,据我所知,如果我在包含 IP 地址的属性上使用此注释,那么它将不再有效。

如果这不可能,您还有哪些其他建议可以针对此特定情况制定解决方法?

我们使用自上而下的方法创建服务(即我们获得了 WSDL,我们使用 wsdl2java 从中创建 Java 对象 + 服务接口(interface))

最佳答案

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

We're securing our apps, after an ethical hacking test, the results thrown that we were exposing services and production IP addresses on our URLs

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

So, we internally know what IP address does SERVER_1 has, but people outside that manage to get there doesn't, in other words how could I create an alias for the IP address and use it instead of the real ip address on it?

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

关于Java WSDL 修改或隐藏 Web View 上的某些属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46228683/

相关文章:

java - 使用 Mockito 注入(inject) Autowiring 的 bean 并在模拟上设置一些属性

spring - HTTP 状态 [500] - 部署 war 时的 Servlet.init()

database - RESTful URI 是否应该公开数据库主键?

java - 如何使用 REST API 在 Jira 中创建问题?

java - 如何让我的程序接受任意数量的数组而不是一组?

java - Java中Generic类的两种不同特化的比较

java - Spring声明式事务管理不起作用

jquery - 在传递到 Web 服务之前将 jqGrid rowNum 从 ALL 更改为 -1 的最佳方法

java - bluemix 上支持 http posts 的 Web 服务

Java 检查 String 中的 int 范围