大家好,我是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源碼裏面是如何調用攔截器的
這裏我摘的是PresenceRouter裏面的消息處理函數,我們可以看到消息在被處理之前和處理之後都被攔截了一次,因此在處理之前processed=false,處理之後就爲processed=true;由於這是服務器收消息,因此incoming都爲true,同樣在消息往客戶端傳送的時候也會被攔截兩次,incoming=false。最後通過InterceptorManager.getInstance().addInterceptor將攔截器加到openfire中,就可以生效了。