拦截器分为Service端Client端

拦截器是在发送soap消息包的某一个时机拦截soap消息包,对soap消息包的数据进行分析或处理。分为CXF自带的拦截器自定义的拦截器

1、Service端:

通过将org.apache.cxf.jaxws.EndpointImpl类的方法即可实现

  发布Web Service 方法可以通过Endpoint.publish()方法,此方法返为EndpointImpl,所以为Service端添加拦截器很简单。

部分代码:
UserService us = new UserServiceImpl();
String address = "http://192.168.10.254:9999/crazyit";
EndpointImpl ep = (EndpointImpl)Endpoint.publish(address , us);
//下面方法就可以添加拦截器(CXF提供的拦截器)
//cxf-2.2.10.jar  org.apache.cxf.interceptor.* (CXF提供的拦截器)
ep.getOutInterceptors().add(new LoggingOutInterceptor());
ep.getInInterceptors().add(new LoggingInInterceptor());
ep.getInInterceptors().add(new AuthIntercetpr()); //此拦截器是自定义的拦截器。

2、Client端 客户端可以通过对org.apache.cxf.frontend.ClientProxy中的getClient()方法获取org.apache.cxf.endpoint.Client对象,该对象可以为客户端添拦截器。

部分代码
//为客户端添加拦截器
org.apache.cxf.endpoint.Client client = ClientProxy.getClient(us);
client.getInInterceptors().add(new LoggingInInterceptor());
client.getOutInterceptors().add(new LoggingOutInterceptor());
//自定义拦截器
client.getOutInterceptors().add(new AddHeaderInterceptor("crazyit" , "crazyit.org2"));

3、自定义的拦截器

自定义拦截器需要继承org.apache.cxf.phase.AbstractPhaseInterceptor 抽象类,并实现其handleMessage方法,与重写自定义的构造器(由于AbstractPhaseInterceptor 没有无参构造器,所以要在自定义构拦截器的造器中调用supper(带参数))。

部分代码
public class AuthIntercetpr     extends AbstractPhaseInterceptor<SoapMessage> {
    public AuthIntercetpr()     {        
 //子类总会调用父类的构造器,         
//默认是调用无参数的构造器。
        //指定该拦截器在哪个阶段被激发       
  super(Phase.PRE_INVOKE);   
  }
    //处理消息   
  public void handleMessage(SoapMessage message)     {   
      System.out.println("==================" + message);
        //获取SOAP消息的全部头    
     List<Header> headers = message.getHeaders();
        if(headers.size() < 1)         {   
          throw new Fault(new SOAPException("SOAP消息头格式不对哦!"));     
    }        
        for(Header header : headers)         {  
           SoapHeader soapHeader = (SoapHeader)header;          
   //取出SOAP的Header元素        
     Element element = (Element)soapHeader.getObject();      
       checkSOAPHeader(element);       
  }        
 }

使用CXF为webservice添加拦截器的更多相关文章

  1. WebService -- Java 实现之 CXF ( 使用Spring添加拦截器)

    最重要的就是在ApplicationContext.xml下面添加配置 <!-- service provider --> <jaxws:endpoint implementor=& ...

  2. (七)CXF添加拦截器

    今天开始讲下拦截器,前面大家学过servlet,struts2 都有拦截器概念,主要作用是做一些权限过滤,编码处理等: webservice也可以加上拦截器,我们可以给webservice请求加权限判 ...

  3. CXF添加拦截器和自定义拦截器

    前面讲了如何采用CXF开发webservice,现在来讲如何添加拦截器和自定义拦截器. 服务端代码: HelloWorld implementor=new HelloWorldImpl(); Stri ...

  4. (八)CXF之用spring添加拦截器

    一.案例 本章案例是基于CXF之自定义拦截器基础之上改造的,目的是在服务端中用spring添加拦截器 配置web.xml <?xml version="1.0" encodi ...

  5. (五)CXF之添加拦截器

    一.需求分析 webService中的拦截器类似于servlet的Filter过滤器.一般用于调用服务前后先调用拦截器的方法. 二.案例 本章案例是基于上一章节的基础上添加拦截器的 2.1 服务端添加 ...

  6. spring boot 添加拦截器

    构建一个spring boot项目. 添加拦截器需要添加一个configuration @Configuration @ComponentScan(basePackageClasses = Appli ...

  7. javaweb添加拦截器

    js请求后台代码添加拦截器: package com.ctzj.biz.isale.deploy.controller; import java.io.IOException; import java ...

  8. SpringBoot如何添加拦截器

    在web开发的过程中,为了实现登录权限验证,我们往往需要添加一个拦截器在用户的的请求到达controller层的时候实现登录验证,那么SpringBoot如何添加拦截器呢? 步骤如下: 1.继承Web ...

  9. 在Java后端如何添加拦截器

    在安全编码规范中,在Java后端controller层接口需要对调用者的身份进行确认,以防非法用户进行访问.若是在controller层的每个接口处都添加逻辑判断,那么代码重复度高,并且费力费时.此时 ...

随机推荐

  1. Chrome浏览器缓存查看工具-ChromeCacheView

    最近想听一下最新的流行热歌,按着某网站的新歌排行榜逐首在巨鲸音乐网搜索下载,但相当一部分的歌曲还是没能下载到,逼不得已只能到百度MP3下载,在搜索结果中已经挑体积比较大的文件来下载了,但下载到的MP3 ...

  2. python引用,浅拷贝,深拷贝

    1.引用 传递的是引用,原始列表改变,被赋值列表会同样改变,因为他们指向的是同一个地址. alist = [1,2,3,["a","b"]] blist = a ...

  3. hdoj1114 Piggy-Bank

    Piggy-Bank Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  4. 有趣的switch应用(填入种类,显示响应的价格)

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Python的sys.argv使用说明 通过终端写入环境变量

    刚开始使用这个参数的时候,很不明白其含义.网上搜索很多都是贴的官网上面的一则实例,说看懂,就明白.可是,我看不懂.现在在回头看这个参数使用,并不是很麻烦. 举几个小例子就明白了. 创建一个脚本,内容如 ...

  6. 一个activity

    package com.example.administrator.Activity; import android.content.Context;import android.content.In ...

  7. c++之——template模板函数

    为了实现与数据类型无关的编程,模板应运而生: #include<iostream> #include<string.h> using namespace std; templa ...

  8. 官网下载到离线的Adobe Acrobat Reader DC

    Adobe 官方 FTP :ftp://ftp.adobe.com/ Adobe Acrobat Reader DC 下载目录:ftp://ftp.adobe.com/pub/adobe/reader ...

  9. CentOS6.5下安装Cloudstack

    个人记录: 使用yum源安装,地址:http://mirrors.163.com/.help/CentOS6-Base-163.repo 后续待进行

  10. linux 内核参数调整优化网络

    Linux系统内核设置优化tcp网络,# vi /etc/sysctl.conf,添加以下内容 net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies.当出现SYN等待 ...