2017-09-14 106 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地址分配一個名稱。