cxf 拦截器入门

原创 2013年12月04日 10:30:12

1、定义一个对外提供的接口

package interceptor;

import javax.jws.WebService;

@WebService
public interface IInterceptorSendMsg {
	
	public Boolean sendMsg();
	
	public String receiveMsg();
	
}

 

2、实现定义接口的实现类

package interceptor;

import java.util.Date;

import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService(endpointInterface="interceptor.IInterceptorSendMsg")
@SOAPBinding(style = Style.RPC)
public class InterceptorSendMsg implements IInterceptorSendMsg{

	@Override
	public Boolean sendMsg() {
		System.out.println("sendMsg");
		return true;
	}

	@Override
	public String receiveMsg() {
		System.out.println("receiveMsg");
		return new Date().toString();
	}

}

 

3、自己定义一个输入拦截器

package interceptor;

import java.util.HashMap;
import java.util.Map;

import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;

public class MyInteceptor extends AbstractPhaseInterceptor<Message> {

	private Map<String, String> paramMap = new HashMap<String, String>();
	private String sign;

	public MyInteceptor(String phase) {
		super(Phase.RECEIVE);
		paramMap.put("1", "robert");
		paramMap.put("2", "green");
		paramMap.put("3", "john");
		paramMap.put("4", "smith");
		this.sign = "2";
	}

	@Override
	public void handleMessage(Message msg) throws Fault {
		System.out.println("MyInteceptor: do match person ");
		System.out.println(paramMap.get(sign));
		System.out.println("msg.getId() ---- " + msg.getId());
	}

}

 

备注:

1、自定义拦截器需要继承 AbstractPhaseInterceptor 类。

2、自定义类需要有一个构造方法,主要是为了说明这个拦截器在什么时机做动作(receive,pre_stream等)。org.apache.cxf.phase.Phase 类的静态属性说明。

3、实现handleMessage方法。

 

4、自定定义一个输出拦截器

package interceptor;

import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;

public class MyInteceptorOuter extends AbstractPhaseInterceptor<Message>{

	public MyInteceptorOuter(String phase) {
		super(Phase.PRE_STREAM);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void handleMessage(Message msg) throws Fault {
		// TODO Auto-generated method stub
		System.out.println("MyInteceptorOuter");
		System.out.println(msg.getContextualProperty("result"));
	}

}

 

5、启动服务器

package server;

import interceptor.IInterceptorSendMsg;
import interceptor.InterceptorSendMsg;
import interceptor.MyInteceptor;
import interceptor.MyInteceptorOuter;
import hb.ISessionSendMsg;
import hb.SessionSendMsg;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;

public class InterceptorServer {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JaxWsServerFactoryBean factoryBean1 = new JaxWsServerFactoryBean();
		InterceptorSendMsg interceptor = new InterceptorSendMsg();
		factoryBean1.setAddress("http://localhost:8080/wscxf/interceptor");
		factoryBean1.setServiceClass(IInterceptorSendMsg.class);//接口类
		factoryBean1.setServiceBean(interceptor);
		//输入记录日志
		factoryBean1.getInInterceptors().add(new LoggingInInterceptor());  
		//输出记录日志
		factoryBean1.getOutInterceptors().add(new LoggingOutInterceptor());  
		//接收数据拦截器
		factoryBean1.getInInterceptors().add(new MyInteceptor("2"));  
		//发送数据拦截器
		factoryBean1.getInInterceptors().add(new MyInteceptorOuter("sdaf"));
		
		factoryBean1.create();
	}

}

 

备注:

1、 JaxWsServerFactoryBean 对象用来添加需要的拦截器

2、LoggingInInterceptor 和 LoggingOutInterceptor 拦截器是CXF自带的拦截器,在开发的时候可以放开,用来调试

 

6、测试

package client;
import interceptor.IInterceptorSendMsg;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

public class InterceptorClient {

	public static void main(String[] args) {
		//调用WebService
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(IInterceptorSendMsg.class);
        factory.setAddress("http://localhost:8080/wscxf/interceptor");
        
        IInterceptorSendMsg interceptorSendMsg = (IInterceptorSendMsg)factory.create();
        
        System.out.println(interceptorSendMsg.sendMsg());
        
        System.out.println(interceptorSendMsg.receiveMsg());
	}

}

 

备注:

客户端调用使用的类是JaxWsProxyFactoryBean,服务器启动调用的类是 JaxWsServerFactoryBean

 

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

CXF 入门:HelloWorld接口发布 CXF 入门: 远程接口调用   下面具体的webservice实现类直接用的是上面的,这里不再说明   Java...
  • joeyon
  • joeyon
  • 2015年04月07日 14:32
  • 538

CXF自定义拦截器实现权限控制

一. 拦截器 在我们学习Java的征途中碰到了很多拦截器: Servlet中的Filter就是一个拦截器, Struts2中也有拦截器,. CXF中的拦截器其基本原理还是使用动态代理, 我们可以在不对...
  • zdp072
  • zdp072
  • 2014年06月08日 00:20
  • 3344

【WebService】CXF拦截器的设置以及自定义CXF拦截器

CXF的拦截器和以前学过的servlet的拦截器类似的,都是在开始或结束切入一段代码,执行一些逻辑之类的。我们可以在调用ws服务前设置拦截器,也可以在调用ws服务后设置拦截器,当然了,拦截器也可以添加...
  • eson_15
  • eson_15
  • 2016年07月31日 20:29
  • 5819

Apache CXF拦截器Interceptor实现WebServices用户验证

Apache CXF应该都知道,是一个开源的 Services 框架,可以构建基于SOAP或RESTful 的WebServices ,并且可以和 Spring 天然地进行无缝集成。 不过这里不是关...
  • Mungo
  • Mungo
  • 2016年10月29日 23:04
  • 3617

整合cxf和spring,并添加拦截器

一 服务端 1 创建一个服务端的web工程,导入jar包 2 编写webservice的接口和实现类。     2 编写服务器端的入拦截器,该类继承AbstractPhaseIntercept...
  • Erica_1230
  • Erica_1230
  • 2016年02月07日 21:36
  • 1346

CXF实战之自定义拦截器(五)

CXF已经内置了一些拦截器,这些拦截器大部分默认添加到拦截器链中,有些拦截器也可以手动添加,如手动添加CXF提供的日志拦截器。也可以自定义拦截器,CXF中实现自定义拦截器很简单,只要继承Abstrac...
  • accountwcx
  • accountwcx
  • 2015年07月30日 11:47
  • 5014

CXF为服务器端和客户端添加自定义拦截器进行权限检查验证并且控制台打印日志(4)

  • lzwjavaphp
  • lzwjavaphp
  • 2013年11月06日 11:49
  • 11760

apache cxf服务端拦截器拦截客户端并中断返回自定义消息

apache cxf框架最主要的扩展点就是拦截器了,拦截器可以在不对核心模块进行修改的情况下,动态添加很多功能。拦截器和JAX-WS Handler、Filter的功能类似,当服务被调用时,就会创建一...
  • sunchuanhui7264
  • sunchuanhui7264
  • 2016年08月10日 16:42
  • 2107

CXF之日志拦截器的使用

0.现在我们有了一个服务端和一个客户端,也能够正常调用了。不过为了能够快速的定位BUG,我们需要知道每一次发送和接收的消息内容。CXF自带的日志拦截器可以实现这个功能。这次我们来试着配置它。 1....
  • kerlos
  • kerlos
  • 2015年04月22日 18:14
  • 1561

CXF 拦截器获取方法信息和参数信息

1. 配置beans.xml               2. 拦截器实现 package com.sf.module.test; import java.lang.refl...
  • syj0301
  • syj0301
  • 2015年08月24日 17:02
  • 2672
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cxf 拦截器入门
举报原因:
原因补充:

(最多只允许输入30个字)