【CXF】- 拦截器 Interceptor
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的更多相关文章
- CXF拦截器(Interceptor)LoggingInInterceptor
Interceptor是CXF架构中一个重要的功能.你可以在不对核心模块进行修改的情况下,动态添加很多功能(你可以想象Struts2拦截器的优点).这对于CXF这个以处理消息为中心的服务框架来说是非常 ...
- Web Service学习之七:CXF拦截器
一.用途 CXF拦截器类似Struts2的拦截器,后者是拦截和处理请求,前者是对发送和接收的sope消息进行处理,一般用于WS请求响应中的权限验证.日志记录,Soap消息处理,消息的压缩处理等: 这个 ...
- CXF 入门:创建一个基于SOAPHeader的安全验证(CXF拦截器使用)
CXF拦截器使用,创建一个使用SOAPHeader的安全验证xml格式: <soap:Header> <auth:authentication xmlns:auth="ht ...
- struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...
- struts2拦截器interceptor的三种配置方法
1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...
- SSM-SpringMVC-33:SpringMVC中拦截器Interceptor讲解
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 拦截器Interceptor: 对处理方法进行双向的拦截,可以对其做日志记录等 我选择的是实现Handler ...
- 过滤器(Filter)和拦截器(Interceptor)
过滤器(Filter) Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序.它依赖于servlet容器,在实现上,基于函数回调,它可以对几乎所有请求 ...
- 二十五、过滤器Filter,监听器Listener,拦截器Interceptor的区别
1.Servlet:运行在服务器上可以动态生成web页面.servlet的声明周期从被装入到web服务器内存,到服务器关闭结束.一般启动web服务器时会加载servelt的实例进行装入,然后初始化工作 ...
- Flume 拦截器(interceptor)详解
flume 拦截器(interceptor)1.flume拦截器介绍拦截器是简单的插件式组件,设置在source和channel之间.source接收到的事件event,在写入channel之前,拦截 ...
随机推荐
- Python爬虫爬取贴吧的帖子内容
最近在看一个大神的博客,从他那里学会了很多关于python爬虫的知识,其实python如果想用在实际应用中,你需要了解许多,比如正则表达式.引入库.过滤字段等等,下面不多说,我下面的程序是爬取Ubun ...
- HDU2552 三足鼎立 【数学推理】
三足鼎立 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- Centos7-安装Gradle4.10
1.下载 官方安装文档:https://gradle.org/install/ 官方下载地址:http://services.gradle.org/distributions/gradle-4.10- ...
- Codeforces round 1103
Div1 534 我可能还太菜了.jpg 果然我只是Div 2 选手 A (这题是Div1吗... 直接构造:竖着放的在第一行和第二行,然后横着放的时候直接放在第三行就行. #include < ...
- Flutter - 添加从左向右滑动,返回上一个页面
很多App比如微信.IT之家等都支持从屏幕左侧向右滑动,来返回上一个页面. 很多iOS上的App也都支持. 那么这个神奇的手势滑动是怎么实现的呢? 其实非常简单,只需要添加一句话即可. platfor ...
- 20155211 网络对抗 Exp9 Web安全基础实践
20155211 网络对抗 Exp9 Web安全基础实践 基础问题回答 SQL注入攻击原理,如何防御? 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语 ...
- 5213 Exp3 免杀原理与实践
5213 Exp3 免杀原理与实践 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧 使用msf编码器 ...
- 定制 input[type="radio"] 和 input[type="checkbox"] 样式
表单中,经常会使用到单选按钮和复选框,但是,input[type="radio"] 和 input[type="checkbox"] 的默认样式在不同的浏览器或 ...
- 【DDD】领域驱动设计实践 —— 业务建模战术
本文结合团队在COMMUNITY(社区服务系统)业务建模过程中的实践经验,总结得到一些DDD业务建模的小招数,不一定是完美的,但是对我们团队来说很有效用,希望能帮到其他人.后面会陆续将项目中业务建模的 ...
- python+Selenium 环境搭建
一.下载相关软件 1.python http://python.org/getit/ 2.setuptools http://pypi.python.org/pypi/setuptools 3.pip ...