如下搭建的Webservice:

在服务端填写如下代码:

这里就是添加进和出的拦截器

public class Main {public static void main(String[] args) {MyService myService = new MyServiceImpl();JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();factoryBean.setAddress("http://127.0.0.1/MyService");   //设置暴露地址factoryBean.setServiceClass(MyService.class);   //接口factoryBean.setServiceBean(myService);  //设置实现类factoryBean.getInInterceptors().add(new LoggingInInterceptor());factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());factoryBean.create();   //创建webservice接口}
}

客户端增加拦截器:

public class Main {public static void main(String[] args){MyServiceService service = new MyServiceService();MyService myService = service.getMyServicePort();Client myClient = ClientProxy.getClient(myService);myClient.getInInterceptors().add(new LoggingInInterceptor());myClient.getOutInterceptors().add(new LoggingOutInterceptor());myService.getRoles();}
}

发送请求后可以看到打印了,服务端:

客户端:

下面是自定义的,加个用户名和密码:

他这里还是把用户名密码放到xml里面,如下:

客户端去判断:

客户关键端源码如下:

package cn.it1995.interceptor;import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.headers.Header;
import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.w3c.dom.Document;
import org.w3c.dom.Element;import javax.xml.namespace.QName;
import java.util.List;public class AddHeaderInterceptor extends AbstractPhaseInterceptor<SoapMessage> {private String userName;private String password;public AddHeaderInterceptor(String userName, String password){super(Phase.PREPARE_SEND);this.userName = userName;this.password = password;}public void handleMessage(SoapMessage message) throws Fault{List<Header> headerList = message.getHeaders();Document doc = DOMUtils.createDocument();Element ele = doc.createElement("authHeader");Element uElement = doc.createElement("userName");uElement.setTextContent(userName);Element pElement = doc.createElement("password");pElement.setTextContent(password);ele.appendChild(uElement);ele.appendChild(pElement);headerList.add(new Header(new QName("java"), ele));}
}

服务端关键源码如下:

package cn.it1995.interceptor;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;
import org.w3c.dom.NodeList;import java.util.List;public class MyInterceptor extends AbstractPhaseInterceptor<SoapMessage> {public MyInterceptor(){super(Phase.PRE_INVOKE);}@SuppressWarnings("null")public void handleMessage(SoapMessage message) throws Fault {List<Header> headers = message.getHeaders();if(headers == null && headers.size() == 0){throw new Fault(new IllegalArgumentException("没有Header,拦截器进行拦截"));}Header firstHeader = headers.get(0);Element ele =  (Element) firstHeader.getObject();NodeList uList = ele.getElementsByTagName("userName");NodeList pList = ele.getElementsByTagName("password");if(uList.getLength() != 1){throw new Fault(new IllegalArgumentException("用户名格式不对"));}if(pList.getLength() != 1){throw new Fault(new IllegalArgumentException("密码格式不对"));}String userName = uList.item(0).getTextContent();String password = pList.item(0).getTextContent();if(!userName.equals("ABC") || !password.equals("123456")){throw new Fault(new IllegalArgumentException("用户名密码错误"));}}
}

源码打包下载地址:

客户端:

https://github.com/fengfanchen/Java/tree/master/CXFClientDemoInterceptor

服务端:

https://github.com/fengfanchen/Java/tree/master/CXFServiceDemoInterceptor

Java笔记-CXF增加拦截器与自定义拦截器相关推荐

  1. WebServices中使用cxf开发日志拦截器以及自定义拦截器

    首先下载一个cxf实例,里面包含cxf的jar包.我下的是apache-cxf-2.5.9 1.为什么要设置拦截器? 为了在webservice请求过程中,能动态操作请求和响应数据, CXF设计了拦截 ...

  2. flume拦截器及自定义拦截器

    拦截器做什么呢? 时间拦截器 以时间拦截器为例.会在Event的header中添加一个属性进去,属性的key叫做timestamp, value是当前的毫秒值. 问题是写到header然后呢?有啥用呢 ...

  3. Elasticsearch 分布式搜索引擎 -- 自动补全(拼音分词器、自定义分词器、自动补全查询、实现搜索框自动补全)

    文章目录 1. 自动补全 1.1 拼音分词器 1.2.1 自定义分词器 1.2.2 小结 1.2 自动补全 1.3 实现酒店搜索框自动补全 1.3.1 修改酒店映射结构 1.3.2 修改HotelDo ...

  4. Elasticsearch7 分词器(内置分词器和自定义分词器)

    文章目录 Elasticsearch7 分词器(内置分词器和自定义分词器) analysis 概览 char_filter html_strip mapping pattern_replace fil ...

  5. ElasticSearch入门:ES分词器与自定义分词器

    ES入门:ES分词器与自定义分词器 分词器的简单介绍 不同分词器的效果对比 自定义分词器的应用 分词器的简单介绍 分词器是es中的一个组件,通俗意义上理解,就是将一段文本按照一定的逻辑,分析成多个词语 ...

  6. 59、Docker ElasticSearch安装拼音分词器及自定义分词器

    一.使用拼音分词器 1.拼音分词器 2.docker下安装拼音分词器插件 3.测试拼音分词器 # 测试拼音分词器 POST /_analyze {   "text": [" ...

  7. 从struts2拦截器到自定义拦截器

    http://www.cnblogs.com/withyou/p/3170440.html 拦截器可谓struts2的核心了,最基本的bean的注入就是通过默认的拦截器实现的,一般在struts2.x ...

  8. Struts2内置拦截器和自定义拦截器

    内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截器,拦截器才可以正常 ...

  9. Struts2第七篇【介绍拦截器、自定义拦截器、执行流程、应用】

    什么是拦截器 拦截器Interceptor-..拦截器是Struts的概念,它与过滤器是类似的-可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Struts为 ...

最新文章

  1. 北大韦神透露现状:自己课讲得不太好,中期学生退课后就剩下5、6个人
  2. 3.NIO_Buffer缓冲区
  3. C#获取文件的MD5码
  4. (转)ASIHTTPRequest 详解, http 请求终结者
  5. 获取执行计划的N种方式
  6. list java removeif_java – removeIf()方法.从List中删除所有元素
  7. 计算机考试vb试题英语成绩,计算机二级考试vb试题_vb试题及参考答案
  8. 脉动风时程matlab程序,脉动风时程matlab程序.docx
  9. Linux网卡驱动(4)—DM9000网卡驱动程序完全分析
  10. [Swift通天遁地]五、高级扩展-(6)对基本类型:Int、String、Array、Dictionary、Date的扩展...
  11. 邮件的服务器密码不正确,企业邮箱foxmail提示接收密码错误解决方法
  12. 分享一个好的清理系统垃圾软件
  13. Linux——缺少ld-linux.so.2,lbiz.so.1库文件
  14. Excel合并计算完成多表格数据汇总求和
  15. 上海计算机考试分值,2019年上海中考总分是多少 考试科目及分值
  16. 机器学习笔记day01
  17. 【2020秋招】提前批陌陌机器学习算法工程师面试经验
  18. 详细教你用NPS搭建内网穿透服务,外出时轻薄本轻松连接家里的游戏主机远程玩耍
  19. liblinear相关学习
  20. 惠普服务器u盘系统安装win7系统,惠普电脑怎么用U盘安装win7系统

热门文章

  1. I am BACKKKKKK
  2. 【转】android TV CTS 4.0.3_r1测试
  3. Linux rm 删除指定文件外的其他文件 方法汇总
  4. silverlight 上下标
  5. 码农即将被淘汰?未来10年,这样的程序员才值钱!
  6. 可视化+数据+图表,报告规范这么写才能升职
  7. 我是一个工资涨不上去的失败程序员
  8. 强烈的打击感jinbiguandan
  9. OpenEIM以前在合作伙伴做的时候
  10. 据说网易搜索引擎-超越GOOGLE