`
victor71
  • 浏览: 1296 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

CXF2.7.4 隐藏wsdl

 
阅读更多

最近遇到需要隐藏wsdl的需求,在网上找了很多资料,没有找到cxf可以配置不生成wsdl。于是只能想别的办法。

这里分两种情况,一种是CXF被集成到Web容器中,这种情况下比较好处理,增加filter就可以了。还有一种情况是CXF使用内置的jetty容器发布webservice服务,这种情况下也好处理,需要增加Interceptor来做拦截。

 

下面对这两种情况写代码进行处理:

1、集成Web容器

package demo.hw.filter;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang3.StringUtils;


public class WSDLFilter implements Filter {

	@Override
	public void destroy() {

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		HttpServletRequest httpRequest = (HttpServletRequest)request;
		Enumeration<String> enumeration = httpRequest.getParameterNames();
		
		while (enumeration.hasMoreElements()) {
			String param = (String) enumeration.nextElement();
			// 查找是否含有参数wsdl,因为使用WSDL也可以,所以这里比较时必须不区分大小写
			if (StringUtils.endsWithIgnoreCase("wsdl", param)) {
				return;
			}
		}
		chain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {

	}

}

然后配置下 filter和需要过滤的url-pattern即可

<filter> 
	<filter-name>WSDLFilter</filter-name> 
	<filter-class>demo.hw.filter.WSDLFilter</filter-class> 
</filter>
<filter-mapping> 
	<filter-name>WSDLFilter</filter-name> 
	<url-pattern>/Complex</url-pattern> 
</filter-mapping>

 

2、使用内置Jetty容器

这里使用JaxWsServerFactoryBean来发布服务

protected Server() throws Exception {
        System.out.println("Starting Server");
        ComplexImpl complexImpl = new ComplexImpl();
        String address = "http://localhost:9000/Complex";
        JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
        factoryBean.setAddress(address);
        factoryBean.setServiceBean(complexImpl);
        
        //增加拦截器,放在最前面
        factoryBean.getInInterceptors().add(0, new WSDLInterceptor());
        factoryBean.create();
    }

 

再看看拦截器的代码

 

package demo.hw.server;

import org.apache.cxf.binding.soap.interceptor.EndpointSelectionInterceptor;
import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.common.util.UrlUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;

public class WSDLInterceptor extends AbstractPhaseInterceptor<Message>{

    	public WSDLInterceptor() {
    		super(Phase.READ);
                getAfter().add(EndpointSelectionInterceptor.class.getName());
	}
    	
		@Override
	public void handleMessage(Message message) throws Fault {
		String method = (String)message.get(Message.HTTP_REQUEST_METHOD);
	        String query = (String)message.get(Message.QUERY_STRING);
	        if (!"GET".equals(method) || StringUtils.isEmpty(query)) {
	            return;
	        }
	        
	        if (UrlUtils.parseQueryString(query).containsKey("wsdl")) {
	        	message.getInterceptorChain().abort();
	        	return;
		}
	}
    }

 

 在较早的版本中,CXF使用QueryHandler来处理 wsdl查询请求。可以想办法将WSDLQueryHandler替换掉。

 

先写到这了.....

 

 

分享到:
评论

相关推荐

    CXF2.7.4完整架包

    CXF2.7.4是这个框架的一个特定版本,发布于2013年。在这个版本中,开发者可以找到一系列的JAR文件,这些文件包含了CXF的核心功能和依赖库。"CXF2.7.4完整架包"意味着你得到了该版本的所有组件,可以用于搭建或升级...

    spring3.0.7与cxf2.7.4整合jar包

    提供的压缩包"spring3.0.7与cxf2.7.4整合jar包"正是为了简化这个过程,只包含整合所需的核心库,避免了下载大量不必要的依赖,对于初学者和快速原型开发来说非常实用。记得根据你的项目需求,将这些库添加到你的类...

    apache-cxf-2.7.4

    5. **工具集**:CXF提供了各种工具,如WSDL(Web Services Description Language)到Java代码的生成器、服务测试客户端、WS-*政策编辑器等,极大地简化了开发过程。 6. **模块化设计**:Apache CXF的设计是高度模块...

    apache cxf api

    6. **模块化结构**:CXF的2.6.6版本可能包含多个模块,每个模块专注于特定的功能,如CXF-RT-TRANSPORTS对应于不同的传输层实现,CXF-RT-WSDL处理WSDL相关的工作等。 7. **RESTful服务**:CXF对RESTful风格的支持...

    webService工程

    在"webService工程"中,CXF2.7.4版本被用来实现Web服务的发布和调用,提供服务端点的实现和客户端的代理。 **Jackson**: Jackson是一个高性能的JSON处理器,用于JSON序列化和反序列化。在本工程中,Jackson库可能...

    271个java需要用的jar包

    cxf-api-2.7.4.jar cxf-rt-bindings-soap-2.7.4.jar cxf-rt-bindings-xml-2.7.4.jar cxf-rt-core-2.7.4.jar cxf-rt-databinding-jaxb-2.7.4.jar cxf-rt-frontend-jaxws-2.7.4.jar cxf-rt-frontend-simple-2.7.4.jar ...

Global site tag (gtag.js) - Google Analytics