openfire登录验证 plugin 不登录可以接受消息吗

[转载]一步一步开发自己的Openfire插件(聊天记录插件)
作用:初始化时在控制台打印测试消息。
开发环境:winxp/eclipse3.6/jdk1.5&1.6/mysql5.0/openfire3.7
开发步骤:
布署openfire3.7源码
2.&src/plugins目录下新建文件夹chatHistory。并按下图的目录结构新建对应的文件。
plugin.xml文件代码如下:
ChatHistoryInterceptor.java文件代码如下:
最后输出语句“测试插件启动成功”在控制台显示乱码,将此改为""
ChatHistoryPlugin.java文件代码如下:
3.打包插件
a.第一次打包需配置ant工具。在环境变量中,
添加 path=C:Program FilesJavajdk1.5.0_09;D:Program
FilesMyEclipse6.5eclipsepluginsorg.apache.ant_1.7.0.vbin
(如果原来有path,在变量值的尾部添加半角分号 ; 然后再加入上面的jdk和ant路径 )
进入cmd,进入 openfire/build所在目录:输入命令:ant&plugins
等待执行完,而且没有报错,说明打包成功。在openfire3.6.3targetopenfireplugins目录下就生成了itvi.jar
启动openfire
,如发现控制台输出“测试插件启动成功”,说明插件开发成功。
注:这是第一次开发插件,纠结中成功!但是控制台没有打印出“测试插件启动成功”信息!待研究。。。
问题解决:
主要是控制台不打印汉字,改为英语,一切OK!以下是运行效果:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。openfire开发(四)消息拦截器
时间: 23:38:28
&&&& 阅读:1125
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&大家好,我是LD,今天给大家介绍openfire的消息拦截器。通常,我们在开发插件的过程中会有一种需求,需要对客户端发送的消息来做一些我们自己的处理,比如保存数据等等。这里我们就会使用到拦截器,&&&&在openfire中,自定义拦截器需要实现PacketInterceptor接口。下面我们写一个简单的拦截器来介绍一下。import&org.jivesoftware.openfire.interceptor.PacketI
import&org.jivesoftware.openfire.interceptor.PacketRejectedE
import&org.jivesoftware.openfire.session.S
import&org.xmpp.packet.P
public&class&TestPacketInterceptor&implements&PacketInterceptor&{
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=由于这是服务器收消息,因此incoming都为true,同样在消息往客户端传送的时候也会被拦截两次,incoming=false。最后通过InterceptorManager.getInstance().addInterceptor将拦截器加到openfire中,就可以生效了。本文出自 “” 博客,请务必保留此出处标签:&&&&&&&&&&&&&&&
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!xmpp with openfire之五 插件-利用Broadcast实现群 - hety - ITeye技术网站
博客分类:
openfire提供了很好的插件支持,安装也非常方便。
下面介绍一个使用Broadcast插件实现的简单群
Broadcast插件是一个向用户发送广播消息的插件。
安装插件
登录openfire管理控制台-插件-插件管理-有效的插件
可以看到开放源代码插件列表
找到Broadcast& 点击右则的‘+’号安装即可
然后到插件管理-插件中
可以看到Broadcast已经在安装的插件列表中
Broadcast可以通过系统属性来进行配置
plugin.broadcast.serviceName
Broadcast的服务名,如果没有设置,默认的就是 "broadcast".
plugin.broadcast.disableGroupPermissions
组广播授权,设为'true',允许任何用户对组中发送广播
设为'false',只有组成员或管理员可以向一个组中发送广播
默认值是'false'
plugin.broadcast.groupMembersAllowed
组成员广播授权,设为'true',允许组成员对组中发送广播
设为'false',只有管理员可以对组中发送广播
默认值是'true'
这个配置只有在plugin.broadcast.disableGroupPermissions为'false'才有效
plugin.broadcast.allowedUsers
指定用户广播授权,设定只允许用户的成员发送广播
如果没有指定,任何用户都可以对所有用户广播
指定用户的格式为完整的JID ( )
我们假设有这样一个群应用的环境:
在企业应用中所有的好友都是同事,群中的成员也是所有的同事
任何人都可以在群中发言
这样broadcast的组授权设置就可以不用
全部使用默认设置,serviceName也用默认的‘ broadcast’ :)
这样就可以用下面的数据包发送一个群消息
发送的数据包
&message from="/xiaoe" id="xiaoeiq-8" to="all@" type="chat"&
&body&hello group&/body&
&thread&xiaoeiq-9&/thread&
&x xmlns="jabber:x:event"&
&offline/&&composing/&
&/message&
在此openfire服务器上的所有用户都将收到这条消息
而客户端实现很方便,只需要判断message.to 为all@
就可以将它显示在群窗口中了
浏览 13507
朋友你好,我也是正在研究spark的群,看见你上面所写的利用广播所实现的群,能否指教一下,怎么使用,按照你所说的,我测试了好几次都没有实现.谢谢了.能否把你上面群的例子发我一份;期待中.man_有问题可以到这个QQ 群里问一下
浏览: 106384 次
来自: 青岛
碰到这个问题了,我的web.xml 也不起作用
将这个编译好的类,加入我的lib\openfire.jar,之 ...
hetylei 写道lookdd1 写道请问,整合现有数据库为 ...
lookdd1 写道请问,整合现有数据库为oracle的时候如 ...openfire 消息拦截器 - 黄彪学习笔记 - ITeye技术网站
博客分类:
文档参考 :http://blog.csdn.net/majian_1987/article/details/9814185
package com.bis.plugin.
import java.io.F
import org.jivesoftware.openfire.container.P
import org.jivesoftware.openfire.container.PluginM
import org.jivesoftware.openfire.interceptor.InterceptorM
import org.jivesoftware.openfire.interceptor.PacketI
import org.jivesoftware.openfire.interceptor.PacketRejectedE
import org.jivesoftware.openfire.session.S
import org.xmpp.packet.P
public class MessagePlugIn implements Plugin,PacketInterceptor {
private static PluginManager pluginM
private InterceptorManager interceptoerM
public MessagePlugIn() {
interceptoerManager = InterceptorManager.getInstance();
public void initializePlugin(PluginManager manager, File pluginDirectory) {
pluginManager =
//将拦截器注册到消息邮局中
//InterceptorManager.getInstance().addInterceptor(this);
interceptoerManager.addInterceptor(this);
System.out.println("加载插件成功!");
public void destroyPlugin() {
interceptoerManager.removeInterceptor(this);
System.out.println("销毁插件成功!");
public void interceptPacket(Packet packet, Session session,
boolean incoming, boolean processed) throws PacketRejectedException {
System.out.println("接收到的消息内容:"+packet.toXML());
1、继承Plugin接口,就是在系统启动的时候会执行initializePlugin()方法,表示这是一个插件类
2、继承PacketInterceptor接口,表示这个类是一个拦截Message的消息类,当拦截的时候,会执行interceptPacket方法
关于openfire是如何管理消息拦截器的?
我们可以看看MessageRouter类的route(Message packet)方法
public void route(Message packet) {
if (packet == null) {
throw new NullPointerException();
ClientSession session = sessionManager.getSession(packet.getFrom());
// Invoke the interceptors before we process the read packet
//系统的拦截器就是在这里调用的,遍历动态添加的所有拦截器
InterceptorManager.getInstance().invokeInterceptors(packet, session, true, false);
if (session == null || session.getStatus() == Session.STATUS_AUTHENTICATED) {
JID recipientJID = packet.getTo();
// Check if the message was sent to the server hostname
if (recipientJID != null && recipientJID.getNode() == null && recipientJID.getResource() == null &&
serverName.equals(recipientJID.getDomain())) {
if (packet.getElement().element("addresses") != null) {
// Message includes multicast processing instructions. Ask the multicastRouter
// to route this packet
multicastRouter.route(packet);
// Message was sent to the server hostname so forward it to a configurable
// set of JID's (probably admin users)
sendMessageToAdmins(packet);
// Deliver stanza to requested route
routingTable.routePacket(recipientJID, packet, false);
catch (Exception e) {
log.error("Failed to route packet: " + packet.toXML(), e);
routingFailed(recipientJID, packet);
packet.setTo(session.getAddress());
packet.setFrom((JID)null);
packet.setError(PacketError.Condition.not_authorized);
session.process(packet);
// Invoke the interceptors after we have processed the read packet
//系统的拦截器就是在这里调用的,遍历动态添加的所有拦截器
InterceptorManager.getInstance().invokeInterceptors(packet, session, true, true);
} catch (PacketRejectedException e) {
// An interceptor rejected this packet
if (session != null && e.getRejectionMessage() != null && e.getRejectionMessage().trim().length() & 0) {
// A message for the rejection will be sent to the sender of the rejected packet
Message reply = new Message();
reply.setID(packet.getID());
reply.setTo(session.getAddress());
reply.setFrom(packet.getTo());
reply.setType(packet.getType());
reply.setThread(packet.getThread());
reply.setBody(e.getRejectionMessage());
session.process(reply);
备注:拦截器本身只是拦截发送过来的消息,但是本身并没有修改消息的内容。
浏览: 2026568 次
来自: 长沙
debug版本的apk没有问题,签名以后的apk 就不跳转链接 ...
直接用缓存啊 干嘛用map
不错。不知道你知不知道,缓存写磁盘,再恢复的问题
下载439次,就没一个说谢谢。ps:谢谢博主的分享。}

我要回帖

更多关于 openfire 无法登录 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信