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源码里面是如何调用拦截器的

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

时间: 2025-01-04 02:00:35

openfire开发(四)消息拦截器的相关文章

开发openfire 消息拦截器插件PacketInterceptor

开发消息拦截器的步骤跟开发简单插件步骤一样,要开发消息拦截器插件,首先继承PacketInterceptor包拦截类,然后在initializelPlugin()方法中注册拦截器,就可以实现interceptPackage()方法中拦截包(即此方法中的packet参数)了.并且,可以通过入参incoming来判断是服务器发送的包还是接受的包(注:true为服务器接收的包:false为发出的包).processed参数用处暂不明,猜想是对请求做了什么处理的标识,但不影响我们对包进行拦截和处理. 这

SpringMVC笔记(四)拦截器

一.拦截器:Spring MVC也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必 须实现HandlerInterceptor接口 二.实现步骤: 1.自定义实现类实现HandlerInterceptor接口 2.在springMVC中配置文件中的配置相应的拦截器 实现的代码: 1.自定义实现类 package com.neuedu.springmvc.interceptor; import javax.servlet.http.HttpServletRe

C#制作一个消息拦截器(intercept)1

首先,我们先要制作一个自定义Attribute,让他可以具有上下文读取功能,所以我们这个Attribute类要同时继承Attribute和IContextAttribute. 接口IContextAttribute中有两个方法需要实现 1.bool   IsContextOK(Context ctx, IConstructionCallMessage msg); 2.void  GetPropertiesForNewContext(IConstructionCallMessage msg); 简

C#制作一个消息拦截器(intercept)3

之前为InterceptAttribute的上下文环境添加了"Intercept"属性(InterceptProperty),正因为InterceptProperty继承了IContributeObjectSink,所以我们要实现GetObjectSink(),继而我们要创建一个继承ImessageSink的类来作为返回值. 这样就引发出了InterceptSink类的实现: public class InterceptSink : IMessageSink { private IMe

C#制作一个消息拦截器(intercept)4

ok,我们拦截器基本构造完成,接下来我来告诉大家如何去使用. 注意一个问题,object拦截器我们要拦截什么,那么我们就要在需要拦截的类上面做手脚了. 首先,创建我们需要被拦截的类. 然后,我们再对类进行相应的包装: 1.该类要标记InterceptAttribute属性 2.该类要继承ContextBoundObject,只有继承ContextBoundObject的类,vs才能知道该类需要访问Context,这样标记的InterceptAttribute才有效. /// <summary>

struts2第四天——拦截器和标签库

一.拦截器(interceptor)概述 struts2是个框架,里面封装了很多功能,封装的很多功能都是在拦截器里面. (属性封装.模型驱动等都是封装在拦截器里面) struts2里面封装了很多功能,有很多拦截器,每次执行一部分拦截器,比如一些默认拦截器等 默认拦截器的位置在 core的jar包的struts-default.xml里边<interceptor>标签里边 二.拦截器基本原理 拦截器在什么时候执行: 在action对象创建之后和action方法执行之前进行执行(使用在相关位置打断

和大彪一起来学习-SpringMvc之第四回(拦截器使用)

一.拦截器介绍 springmvc中的拦截器,简单来说就是对用户的请求进行拦截,我们可以在拦截用请求后进行预处理和后处理,可以在这里做日志记录.权限控制.请求用时计算等操作.和Servlet api中的Filter有点类似. 二.拦截器使用 1.编写拦截器 我们要自己编写拦截器,比较常用的方法是实现org.springframework.web.servlet.HandlerInterceptor类,我把这个类的源码贴出来吧,内部就三个方法,我们的业务可以在方法中实现. package org.

基于Bootstrap和Knockout.js的ASP.NET MVC开发实战 关于 拦截器的 学习 部分

先贴一段: 下面贴代码: 上面这段代码呢,有几个点迷糊.可以找找看

Struts2(十四)拦截器实现权限管理

一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截Action请求 在访问的Action执行之前和执行之后执行代码实现某项功能 Struts2: 大部分功能是在拦截器中实现的如:接收输入的参数,数据验证,文件上传,国际化等 应用程序: 需要在Action执行的前后执行特定功能 Action执行时间统计,Action访问权限管理 Action添加功能