2010-12-16 97 views
4

我使用CXF和Spring開發了一個Java Web服務。 由於安全原因,我想隱藏WSDL,儘管WS仍然可用。 有沒有辦法做到這一點使用CXF? ?如何使用CXF隱藏WSDL

+2

怎麼隱藏WSDL使它更安全? – skaffman 2010-12-16 14:49:50

+1

WSDL記錄Web服務的合同。如果你沒有發佈它,侵略者試圖破解網絡服務更加困難。當然,它不應該是唯一的保護。 :-) – 2011-01-12 16:33:44

回答

2

你可以在web.xml中時停止從正在處理WSDL請求添加一個Servlet過濾器:

<filter> 
    <filter-name>wsdlFilter</filter-name> 
    <filter-class>com.mycompany.myWsdlFilterClass</filter-class>  
</filter> 

<filter-mapping> 
    <filter-name>wsdlFilter</filter-name> 
    <url-pattern>*?wsdl</url-pattern> 
</filter-mapping> 

的doFilter()方法是這樣的:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, 
    ServletException { 

    String queryString = ((HttpServletRequest) request).getQueryString();  
    if(queryString!=null && queryString.toLowerCase().startsWith("wsdl")){ 
    return; //the filter chain stops and request does not get processed 
    } 
    else{ 
    chain.doFilter(request, response); 
    } 

} 
+0

'filter-mapping'是否匹配查詢參數?我更有可能嘗試阻止它提供GET請求(SOAP通過POST)。 – 2011-06-02 12:35:30

+0

您可以將映射設置爲攔截所有內容的*。在過濾器類中可以使用((HttpServletRequest)請求).getMethod()。如果它返回POST,則允許它通過(調用chain.doFilter()),如果不是,則停止它(通過不調用它)。 – Arnelism 2011-06-06 08:00:58