2010-12-16 3 views
4

저는 CXF 및 Spring을 사용하여 Java 웹 서비스를 개발했습니다. 보안상의 이유로 WS를 숨기고 싶지만 WS는 계속 사용할 수 있습니다. CXF를 사용하여이를 수행하는 방법이 있습니까? ?CXF를 사용하여 WSDL을 숨기는 방법

+2

이 방법을 숨기고 않습니다 WSDL을 사용하면 보안이 강화됩니까? – skaffman

+1

WSDL은 웹 서비스에 대한 계약을 문서화합니다. 게시하지 않으면 침입자가 웹 서비스를 해킹하려고 시도하는 것이 더 어렵습니다. 물론 유일한 보호가되어서는 안됩니다. :-) –

답변

2

당신은 중지 web.xml에 처리되는 WSDL 요청에 서블릿 필터를 추가 할 수 있습니다

<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로 간다.) –

+0

모든 것을 가로 채기위한 매핑을 *로 설정할 수 있습니다. 필터 클래스에서 ((HttpServletRequest) request) .getMethod()를 사용할 수 있습니다. POST를 반환하면이를 허용하고 (chain.doFilter()를 호출합니다. 그렇지 않으면 중지합니다 (호출하지 않음). – Arnelism

관련 문제