openfire拦截器

在javaweb中有拦截器,struts有拦截器,spring mvc有拦截器,程序结构中的拦截器可以起到拦截特定需要信息的功能,那么openfire有没有自己的拦截器呢?

肯定有啊,要不我写什么啊?

纵观openfire消息的处理流程,可以看到下图内容:



这一排并列的三个是openfire处理不同类型xmpp节点的路由方法(此“路由”作动词),路由方法中,前后都使用了

InterceptorManager.getInstance().invokeInterceptors(Packet packet, Session session, boolean read, boolean processed)拦截器


该拦截器在MessageRouter类中的位置如下图:



这两个拦截器分别在处理消息之前与之后,而参数boolean processed代表了是否已经拦截完毕。

了解了这么多,openfire的拦截器在我们对openfire的二次开发过程中有什么作用呢?

关于openfire的聊天,openfire有自己的离线消息处理机制,但是,openfire并没有提供有关消息记录的功能,我们可以通过编写openfire的插件,并且实现拦截器,拦截发送的消息并存入数据库中。


在程序中实现拦截器功能需要类实现org.jivesoftware.openfire.interceptor.PacketInterceptor接口,并且实现interceptPacket(Packet packet, Session session,  boolean incoming, boolean processed) throws PacketRejectedException方法,具体的操作如下:


import java.io.File;

import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.interceptor.InterceptorManager;
import org.jivesoftware.openfire.interceptor.PacketInterceptor;
import org.jivesoftware.openfire.interceptor.PacketRejectedException;
import org.jivesoftware.openfire.session.Session;
import org.xmpp.packet.Message;
import org.xmpp.packet.Packet;

import com.xymobile.service.ChatService;

public class ChatsPlugin implements Plugin,PacketInterceptor {

    private InterceptorManager interceptoerManager;  
    
    public ChatsPlugin() {  
        interceptoerManager = InterceptorManager.getInstance();  
    }
    
    @Override  
    public void initializePlugin(PluginManager manager, File pluginDirectory) {  
        pluginManager = manager;              
        interceptoerManager.addInterceptor(this);  
        System.out.println("Load plugin success!");  
    }  
  
    @Override  
    public void destroyPlugin() {  
        interceptoerManager.removeInterceptor(this);  
        System.out.println("Destruction plugin success!");  
    }  
  
    @Override
    public void interceptPacket(Packet packet, Session session,  
            boolean incoming, boolean processed) throws PacketRejectedException {  
    	    	
		System.out.println(packet);
    	
    }  
}

这里编写了一个打印openfire聊天消息的插件,有关于openfire插件的实现请查看有关文章




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值