2017-09-14 67 views
4

TLDR是否有可能创建一个IP地址(如0.0.0.0:8080/servicesSERVER_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对象+服务接口)

+0

我假设你正在用自下而上的方法创建服务? – Namphibian

+0

@Nafphibian你的意思是“自下而上的方法”*?对不起,我没有得到你所指的。这些服务已经开发出来了,我只是给这个系统一些维护... – Frakcool

+0

当开发WSDL文件时,自顶向下和自下而上是两种不同的策略,但是在您的情况下,您正在维护它,所以评论无效。 – Namphibian

回答

0

TLDR:使用DNS将名称指定到您的IP地址。

我们的道德黑客测试后保证我们的应用程序,结果 抛出,我们是在 我们的网址

公开服务和生产IP地址你有一个SOAP的服务。要使用它,需要知道端点的地址。所以无论如何你都会“暴露”它。不建议使用Security through obscurity

所以,我们内部知道什么IP地址没有服务器1有,但人们 之外的管理到那里不,换句话说,我怎么可能 创建的IP地址的别名,并用它来代替真正的IP地址 呢?

这就是DNS发明的。 “别名”为IP地址。使用IP地址进行服务是不好的做法。因此,建立一个DNS(或使用主机文件)为每个IP地址分配一个名称。