CXF拦截器
  
  拦截动态操作请求和响应数据
  
  拦截器分类
  
  位置:服务器端拦截器,客户端拦截器
  
  消息方向:入拦截器 出拦截器
  
  定义者:系统拦截器 自定义拦截器:LoggingInInteceptor
  
  ①:创建webservice服务端的自定义入拦截器,用于检查客户端传入的参数:
  
  package com.zhiwei.ws.imp;
  
  import java.util.List;
  
  import org.apache.cxf.binding.soap.SoapHeader;
  
  import org.apache.cxf.binding.soap.SoapMessage;
  
  import org.apache.cxf.headers.Header;
  
  import org.apache.cxf.interceptor.Fault;
  
  import org.apache.cxf.phase.AbstractPhaseInterceptor;
  
  import org.apache.cxf.phase.Phase;
  
  import org.w3c.dom.Element;
  
  public class DefineInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
  
  public DefineInterceptor() {
  
  super(Phase.PRE_PROTOCOL);
  
  }
  
  //<head> <name>zhiwei<name></head>
  
  @Override
  
  public void handleMessage(SoapMessage msg) throws Fault {
  
  //获取文件头
  
  List<Header> headers=msg.getHeaders();
  
  SoapHeader header=(SoapHeader) headers.get(0);
  
   Element element=(Element) header.getObject();
  
   String name=element.getElementsByTagName("name").item(0).getTextContent();
  
   if("xiaoyang".equals(name)) {
  
   System.out.println("Server interceptor.........."+name);
  
   return;
  
   }
  
   throw new Fault(new RuntimeException("用户名不正确!"));
  
  }
  
  }
  
  ②:配置服务端的拦截器:引入CXF实现的日志记录拦截器,启动服务端
  
  String address = "http://localhost:8888/webservice";
  
  // 终端发布web服务:SEI实现类
  
  Endpoint endpoint = Endpoint.publish(address, new HelloWSImp());
  
  // 终端控制拦截器
  
  EndpointImpl endpointImpl = (EndpointImpl) endpoint;
  
  // 配置入拦截器:将拦截器加入到拦截器集合:日志拦截器
  
  List<Interceptor<? extends Message>> inIterceptors = endpointImpl.getInInterceptors();
  
  inIterceptors.add(new LoggingInInterceptor());
  
  inIterceptors.add(new DefineInterceptor());
  
  List<Interceptor<? extends Message>> outIterceptors = endpointImpl.getOutInterceptors();
  
  outIterceptors.add(new LoggingOutInterceptor());
  
  System.out.println("server is deploying!");
  
  服务端控制台日志:
  
  ③:创建客户端自定义拦截器
  
  package com.zhiwei.ws.client;
  
  import java.util.List;
  
  import javax.xml.namespace.QName;
  
  import org.apache.cxf.binding.soap.SoapMessage;
  
  import org.apache.cxf.headers.Header;
  
  import org.apache.cxf.interceptor.Fault;
  
  import org.apache.cxf.phase.AbstractPhaseInterceptor;
  
  import org.apache.cxf.phase.Phase;
  
  import org.apache.xml.utils.www.dashuju2.cn DOMHelper;
  
  import org.w3c.dom.Document;
  
  import org.w3c.dom.Element;
  
  @SuppressWarnings("deprecation"www.yongshi123.cn)
  
  public class DefineInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
  
  private String name;
  
  public DefineInterceptor(String name) {
  
  super(Phase.PRE_PROTOCOL); // 准备协议时拦截
  
  this.name = name;
  
  }
  
  /*
  
   * <Envelop> <head> <name>zhiwei<name> </head> <soapenv:Body> <q0:sayHello>
  
   * <arg0>china</arg0> <www.jiahuayulpt.com www.yongshiyule178.com /q0:sayHello> </soapenv:Body> </Envelop>
  
   */
  
  @Override
  
  public void handleMessage(SoapMessage msg) throws Fault {
  
  List<Header> headers=msg.getHeaders(www.dfgjpt.com ); //获取soap的头信息
  
   /* soap消息头:
  
   * <head>
  
   * <zhiwei>
  
   * <name>zhiwei<name>
  
   * <zhiwei>
  
   * </head>
  
  */
  
  Document document=DOMHelper.createDocument();
  
  Element root=document.createElement(www.enzuovip.com"zhiwei");
  
  //Qname给标签添加一个独一无二的名字:类似别名
  
  Element element=document.createElement("name");
  
  element.setTextContent(name);
  
  root.appendChild(element);
  
  headers.add(new Header(new www.furongpt.com QName("root"), root));
  
  System.out.println("DefineInterceptor Interceptor:--------->running!");
  
  }
  
  }
  
  ④:配置客户端拦截器,并且启动客户端
  
  HelloWSImpService helloWSImpService=new HelloWSImpService();
  
  HelloWS helloWS=helloWSImpService.getHelloWSImpPort();
  
  //返回服务类的代理接口
  
  Client client=ClientProxy.getClient(www.maituyul1.cn helloWS);
  
  List<Interceptor<? extends Message>> outIterceptors=client.getOutInterceptors();
  
  outIterceptors.add(new DefineInterceptor(www.modeng2yuL.cn"xiaoyang"));
  
  String result=helloWS.sayHello("--->China!www.boyunylpt1.com");
  
  System.out.println(result);
  
  客户端控制台日志:
  
  服务端控制台日志:
  
  分析:服务端日志明显可看出,webservice是根据soap协议进行通信,并且服务端客户端配置的 拦截器都实现了拦截功能
  
  SOAP: 特殊形式的Http请求形式

【CXF】- 拦截器 Interceptor的更多相关文章

  1. CXF拦截器(Interceptor)LoggingInInterceptor

    Interceptor是CXF架构中一个重要的功能.你可以在不对核心模块进行修改的情况下,动态添加很多功能(你可以想象Struts2拦截器的优点).这对于CXF这个以处理消息为中心的服务框架来说是非常 ...

  2. Web Service学习之七:CXF拦截器

    一.用途 CXF拦截器类似Struts2的拦截器,后者是拦截和处理请求,前者是对发送和接收的sope消息进行处理,一般用于WS请求响应中的权限验证.日志记录,Soap消息处理,消息的压缩处理等: 这个 ...

  3. CXF 入门:创建一个基于SOAPHeader的安全验证(CXF拦截器使用)

    CXF拦截器使用,创建一个使用SOAPHeader的安全验证xml格式: <soap:Header> <auth:authentication xmlns:auth="ht ...

  4. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

  5. struts2拦截器interceptor的三种配置方法

    1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...

  6. SSM-SpringMVC-33:SpringMVC中拦截器Interceptor讲解

     ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 拦截器Interceptor: 对处理方法进行双向的拦截,可以对其做日志记录等 我选择的是实现Handler ...

  7. 过滤器(Filter)和拦截器(Interceptor)

    过滤器(Filter) Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序.它依赖于servlet容器,在实现上,基于函数回调,它可以对几乎所有请求 ...

  8. 二十五、过滤器Filter,监听器Listener,拦截器Interceptor的区别

    1.Servlet:运行在服务器上可以动态生成web页面.servlet的声明周期从被装入到web服务器内存,到服务器关闭结束.一般启动web服务器时会加载servelt的实例进行装入,然后初始化工作 ...

  9. Flume 拦截器(interceptor)详解

    flume 拦截器(interceptor)1.flume拦截器介绍拦截器是简单的插件式组件,设置在source和channel之间.source接收到的事件event,在写入channel之前,拦截 ...

随机推荐

  1. 实践:IIS7下访问ashx页面,显示404

    问题描述 1.路径什么的都对,这方面的原因就不要想了 2.在我的电脑上可以,在同事的电脑上不可以 方案1:未注册ashx的处理应用程序 也就是不知道IIS不知道用什么应用程序处理ashx文件,解决办法 ...

  2. 奔跑吧vivado

        上一节一上来就是Linux,不是炫耀我们的MiZ702能跑Linux,而是为了方便的把外设一次性测试完.大家都知道MiZ702精华在于FPGA与ARM的完美融合,就像太极一样阴阳调和--软中有 ...

  3. 汇编 fsub ,fmul,fdiv,fild,CVTTPS2PI 指令

    知识点:  浮点指令 fsub 一.浮点指令fsub 格式 fsub memvar // st0=st0-memvar 知识点:  浮点指令 fmul 一.浮点指令fmul 格式 fmul mem ...

  4. 使用pandas,7行代码实现朴素贝叶斯

    作者:hhh5460 大抵分成两类 一.离散的.标签化的数据 原文没有使用pandas,我使用pandas重新实现了朴素贝叶斯算法,看起来非常简洁.清爽. import pandas as pd '' ...

  5. Python学习之路(一)之Python基础1

    目录 Python基础初识 1.Python介绍 1.1.Python简介 1.2.Python特点 1.3.Python应用领域 1.4.Python解释器的种类 2.Python基础初识 2.1. ...

  6. libgdx学习记录18——Box2d物理引擎

    libgdx封装了Box2D物理引擎,通过这个引擎能够模拟物理现实,使设计出的游戏更具有真实感. libgdx中,Box2d程序的大概过程: 1. 创建物理世界world,并设置重力加速度. 2. 创 ...

  7. JavaScript 变量提升

    变量提升(Hoisting):在ES6之前,函数声明和变量声明总是被JavaScript解释器隐式地提升(hoist)到包含他们的作用域的最顶端. 注意: 1. JavaScript 仅提升声明,而不 ...

  8. exchange 2010 的两个错误

    最近公司要搭建邮件服务器 过程中 碰到两个问题,记录下来. 引以为戒 . 1,登陆界面能出来 但是无论输入什么都显示 乱码.问题原因 身份验证有问题. 如图所示:  改成这个,然后 重启 iis 就可 ...

  9. stl源码剖析 详细学习笔记priority_queue slist

    // //  priority_queue.cpp //  笔记 // //  Created by fam on 15/3/16. // // //------------------------- ...

  10. 深入浅出etcd系列 – 心跳和选举

    作者:宝爷 校对:DJ 1.绪论 etcd作为华为云PaaS的核心部件,实现了PaaS大多数组件的数据持久化.集群选举.状态同步等功能.如此重要的一个部件,我们只有深入地理解其架构设计和内部工作机制, ...