openfire开发(四)消息拦截器

    大家好,我是LD,今天给大家介绍openfire的消息拦截器。通常,我们在开发插件的过程中会有一种需求,需要对客户端发送的消息来做一些我们自己的处理,比如保存数据等等。这里我们就会使用到拦截器,

    在openfire中,自定义拦截器需要实现PacketInterceptor接口。下面我们写一个简单的拦截器来介绍一下。

import org.jivesoftware.openfire.interceptor.PacketInterceptor;
import org.jivesoftware.openfire.interceptor.PacketRejectedException;
import org.jivesoftware.openfire.session.Session;
import org.xmpp.packet.Packet;

public class TestPacketInterceptor implements PacketInterceptor {

	@Override
	public void interceptPacket(Packet packet, Session session,
			boolean incoming, boolean processed) throws PacketRejectedException {
		// TODO Auto-generated method stub
		
		
	}

}

这里我们需要重写interceptPacket方法,在这个方法里面我们就可以做自己的操作了,比如保存消息等等。

    这里要说的主要是incoming和processed参数的含义。

我们可以看下openfire源码里面是如何调用拦截器的

wKiom1UuLrvwwWDxAAViwdU2wiI161.jpg这里我摘的是PresenceRouter里面的消息处理函数,我们可以看到消息在被处理之前和处理之后都被拦截了一次,因此在处理之前processed=false,处理之后就为processed=true;由于这是服务器收消息,因此incoming都为true,同样在消息往客户端传送的时候也会被拦截两次,incoming=false。最后通过InterceptorManager.getInstance().addInterceptor将拦截器加到openfire中,就可以生效了。

你可能感兴趣的:(拦截器,Interceptor,XMPP,IM)