【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之前,拦截 ...
随机推荐
- Eclipse-安装Spring Tool Suit 插件
登录http://spring.io/tools/sts/all 下载所需的Spring Tool Suit安装包 我用的是springsource-tool-suite-3.6.1.RELEASE- ...
- struts2_文件上传的功能
使用Struts内置的fileUpload拦截器(已默认配置)即可,设计的电商网站,提供用户头像上传的功能 1. 2. 3. 4. 5. 5.未使用拦截器 6.未使用filename 7. 8. 9.
- Verilog中的有符号计算之认知补码
Verilog中的有符号计数,一般是自己定义的而不是像C语言之类的定义一个有符号变量就好了.所以,要想在FPGA的世界里随心所欲的进行有符号运算,必须先对补码有一个很好的认知,然后再注意Verilog ...
- 浅析arm的异常、中断和arm工作模式的联系
说到异常向量,会让人联想到中断向量.其实,中断是属于异常的子集的,也就是说中断其实是异常其中的一种. 回到异常向量,他其实是一张表格,每个格子里存放的是一个地址,或者是一个跳转命令,不管是哪个,其目的 ...
- mfc 线程的诞生和死亡
知识点: 线程概念 线程的诞生 线程的死亡 一. 线程: 线程,是程序执行流的最小单元. 另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点 ...
- P问题,NP问题,NPC问题,NP-hard问题
1.P问题:一个问题能找到一个在多项式时间里解决他的算法 多项式时间(o(1),o(lgn),o(n的a次方)) 非多项式时间 o(a的n次方) o(n!) 2.NP问题:在多项式时间找不到问题的解 ...
- Spring Boot (十三): Spring Boot 小技巧
一些 Spring Boot 小技巧.小知识点 初始化数据 我们在做测试的时候经常需要初始化导入一些数据,如何来处理呢?会有两种选择,一种是使用 Jpa,另外一种是 Spring JDBC .两种方式 ...
- Configuration Section Designer for VS2017
Configuration Section Designer是在Visual Studio中设计符合.Net配置体系配置文件和代码的神器.然而,它的源码已经很久不维护了.现在在新的VS2017中无法使 ...
- camscanner(扫描全能王)功能解析与复现
早就在用camscanner(扫描全能王)这个软件,感觉很不错. 主要功能: 1.页面截取校正 2.增强处理(灰度与颜色) 刚好最近工作与此相关,静心做点仿真,看看其中的操作原理,也做个demo玩玩. ...
- Ubuntu命令行运行C程序和C++程序
首先Ctrl + T 打开一个终端,cd到你建立C/C++文件的目录下. 下面以建立 helloc.c 和 hellocpp.cpp 进行演示 vim helloc.c 按 i 进入插入操作,然后写C ...