博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CXF添加拦截器和自定义拦截器
阅读量:4539 次
发布时间:2019-06-08

本文共 3529 字,大约阅读时间需要 11 分钟。

 

  前面讲了如何采用CXF开发webservice,现在来讲如何添加拦截器和自定义拦截器。

  服务端代码:

     HelloWorld implementor=new HelloWorldImpl();        String address="http://192.xxx.15.117:8089/helloWorld";        // Endpoint.publish(address, implementor); // jdk实现 暴露webservice接口        JaxWsServerFactoryBean factoryBean=new JaxWsServerFactoryBean();        factoryBean.setAddress(address); // 设置暴露地址        factoryBean.setServiceClass(HelloWorld.class); // 接口类        factoryBean.setServiceBean(implementor); // 设置实现类      factoryBean.getInInterceptors().add(new LoggingInInterceptor()); // 添加in拦截器 日志拦截器      factoryBean.getOutInterceptors().add(new LoggingOutInterceptor()); // 添加out拦截器 日志拦截器        factoryBean.getInInterceptors().add(new MyInterceptor()); //自定义拦截器        factoryBean.create(); // 创建webservice接口

  自定义拦截器类:

public class MyInterceptor extends AbstractPhaseInterceptor
{ public MyInterceptor() { super(Phase.PRE_INVOKE); // 在调用方法之前调用自定拦截器 } @SuppressWarnings("null") public void handleMessage(SoapMessage message) throws Fault { List
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("java1234")||!password.equals("123456")){ throw new Fault(new IllegalArgumentException("用户名或者密码错误!")); } }}

  客户端代码:

  先通过输入命令: wsdl2java http://192.xxx.15.117:8089/helloWorld?wsdl 生成需要的代码,谈话编写调用方法。

     HelloWorldImplService service=new HelloWorldImplService();        HelloWorld helloWorld=service.getHelloWorldImplPort();        org.apache.cxf.endpoint.Client client=ClientProxy.getClient(helloWorld);                client.getOutInterceptors().add(new AddHeaderInterceptor("java1234","123")); // 添加自定义拦截器        client.getInInterceptors().add(new LoggingInInterceptor()); // 添加In拦截器 日志拦截器        client.getOutInterceptors().add(new LoggingOutInterceptor()); // 添加Out拦截器 日志拦截器

  自定义拦截器:

public class AddHeaderInterceptor extends AbstractPhaseInterceptor
{ private String userName; private String password; public AddHeaderInterceptor(String userName,String password) { super(Phase.PREPARE_SEND); // 准备发送SOAP消息的时候调用拦截器 this.userName=userName; this.password=password; } public void handleMessage(SoapMessage message) throws Fault { List
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("java1234"),ele)); }}

完成!

 

转载于:https://www.cnblogs.com/heqiyoujing/p/9565401.html

你可能感兴趣的文章
2018.12.27学习JavaScript
查看>>
理工之 A+B Problem III
查看>>
软件工程第一次作业
查看>>
【Android 界面效果24】Intent和PendingIntent的区别
查看>>
node学习之搭建服务器并加装静态资源
查看>>
android 按menu键解锁功能的开关
查看>>
Linux 下的dd命令使用详解
查看>>
POJ-1273 Drainage Ditches 最大流Dinic
查看>>
ASP.NET学习记录点滴
查看>>
uva 12097(二分)
查看>>
[Noip2016] 愤怒的小鸟
查看>>
JAVA wait()和notifyAll()实现线程间通讯
查看>>
python全栈脱产第11天------装饰器
查看>>
Java / Android 基于Http的多线程下载的实现
查看>>
求职历程-----我的简历
查看>>
[总结]数据结构(板子)
查看>>
网页图片加载失败,用默认图片替换
查看>>
C# 笔记
查看>>
2013年10月13日学习:SQL通过命令语句来创建表
查看>>
剑指offer : 二维数组中的查找
查看>>