CXF2.7.4 隐藏wsdl

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

1、集成Web容器

Java代码  收藏代码

  1. package demo.hw.filter;  

  2.   

  3. import java.io.IOException;  

  4. import java.util.Enumeration;  

  5.   

  6. import javax.servlet.Filter;  

  7. import javax.servlet.FilterChain;  

  8. import javax.servlet.FilterConfig;  

  9. import javax.servlet.ServletException;  

  10. import javax.servlet.ServletRequest;  

  11. import javax.servlet.ServletResponse;  

  12. import javax.servlet.http.HttpServletRequest;  

  13.   

  14. import org.apache.commons.lang3.StringUtils;  

  15.   

  16.   

  17. public class WSDLFilter implements Filter {  

  18.   

  19.     @Override  

  20.     public void destroy() {  

  21.   

  22.     }  

  23.   

  24.     @Override  

  25.     public void doFilter(ServletRequest request, ServletResponse response,  

  26.             FilterChain chain) throws IOException, ServletException {  

  27.           

  28.         HttpServletRequest httpRequest = (HttpServletRequest)request;  

  29.         Enumeration<String> enumeration = httpRequest.getParameterNames();  

  30.           

  31.         while (enumeration.hasMoreElements()) {  

  32.             String param = (String) enumeration.nextElement();  

  33.             // 查找是否含有参数wsdl,因为使用WSDL也可以,所以这里比较时必须不区分大小写  

  34.             if (StringUtils.endsWithIgnoreCase("wsdl", param)) {  

  35.                 return;  

  36.             }  

  37.         }  

  38.         chain.doFilter(request, response);  

  39.     }  

  40.   

  41.     @Override  

  42.     public void init(FilterConfig arg0) throws ServletException {  

  43.   

  44.     }  

  45.   

  46. }  

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

Xml代码  收藏代码

  1. <filter>   

  2.     <filter-name>WSDLFilter</filter-name>   

  3.     <filter-class>demo.hw.filter.WSDLFilter</filter-class>   

  4. </filter>  

  5. <filter-mapping>   

  6.     <filter-name>WSDLFilter</filter-name>   

  7.     <url-pattern>/Complex</url-pattern>   

  8. </filter-mapping>  

 

2、使用内置Jetty容器

这里使用JaxWsServerFactoryBean来发布服务

Java代码  收藏代码

  1. protected Server() throws Exception {  

  2.         System.out.println("Starting Server");  

  3.         ComplexImpl complexImpl = new ComplexImpl();  

  4.         String address = "http://localhost:9000/Complex";  

  5.         JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();  

  6.         factoryBean.setAddress(address);  

  7.         factoryBean.setServiceBean(complexImpl);  

  8.           

  9.         //增加拦截器,放在最前面  

  10.         factoryBean.getInInterceptors().add(0new WSDLInterceptor());  

  11.         factoryBean.create();  

  12.     }  

 

再看看拦截器的代码

 

Java代码  收藏代码

  1. package demo.hw.server;  

  2.   

  3. import org.apache.cxf.binding.soap.interceptor.EndpointSelectionInterceptor;  

  4. import org.apache.cxf.common.util.StringUtils;  

  5. import org.apache.cxf.common.util.UrlUtils;  

  6. import org.apache.cxf.interceptor.Fault;  

  7. import org.apache.cxf.message.Message;  

  8. import org.apache.cxf.phase.AbstractPhaseInterceptor;  

  9. import org.apache.cxf.phase.Phase;  

  10.   

  11. public class WSDLInterceptor extends AbstractPhaseInterceptor<Message>{  

  12.   

  13.         public WSDLInterceptor() {  

  14.             super(Phase.READ);  

  15.                 getAfter().add(EndpointSelectionInterceptor.class.getName());  

  16.     }  

  17.           

  18.         @Override  

  19.     public void handleMessage(Message message) throws Fault {  

  20.         String method = (String)message.get(Message.HTTP_REQUEST_METHOD);  

  21.             String query = (String)message.get(Message.QUERY_STRING);  

  22.             if (!"GET".equals(method) || StringUtils.isEmpty(query)) {  

  23.                 return;  

  24.             }  

  25.               

  26.             if (UrlUtils.parseQueryString(query).containsKey("wsdl")) {  

  27.                 message.getInterceptorChain().abort();  

  28.                 return;  

  29.         }  

  30.     }  

  31.     }  

 

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

 

先写到这了.....


转载于:https://my.oschina.net/u/156167/blog/190024

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值