(三)Openfire插件开发

2024-06-11 02:18
文章标签 开发 openfire 插件

本文主要是介绍(三)Openfire插件开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

此部分是Openfire的第三大部分,本部分的开发必须基于前两部分

本文档基于消息拦截器插件功能进行开发。

新建插件messageFilter:

  1. 在openfire插件源码的plugins目录下新建文件夹messageFilter
  2. messageFilter文件夹下新建lib和src文件夹。lib包下放jar包,src文件夹下放要开发的插件源码。
  3. 将changelog.html、logo_large.gif、logo_small.gif、plugin.xml、pom.xml、readme.html在其他的插件中复制到messageFilter目录下
  4. src文件夹下新建文件夹java并右键选择Mark Directory as-→Sources root
  5. java目录下新建Package  com.weishuai
  6. com.weishuai下新建类MessageFilter并实现Plugin和PacketInterceptor接口
  7. 修改plugin.xml,主要是class标签的内容为插件类的权限定名。如下图:

此时我们的插件结构如下图所示

代码如下:

fromid为发信息的id,可以通过断点的而形式在packet的message标签中from属性获取,同理获得toid 

public class DemoPlugin implements Plugin, PacketInterceptor {//B: 消息拦截器private InterceptorManager interceptorManager;@Overridepublic void initializePlugin(PluginManager manager, File pluginDirectory) {// 将当前插件加入到消息拦截管理器(interceptorManager )中,当消息到来或者发送出去的时候,会触发本插件的interceptPacket方法。interceptorManager = InterceptorManager.getInstance();interceptorManager.addInterceptor(this);}@Overridepublic void destroyPlugin() {// 当插件被卸载的时候,主要通过openfire管理控制台卸载插件时,被调用。注意interceptorManager的addInterceptor和removeInterceptor需要成对调用。interceptorManager.removeInterceptor(this);}@Overridepublic void interceptPacket(Packet packet, Session session, boolean incoming, boolean processed) throws PacketRejectedException {//入参incoming来判断是服务器发送的包还是接受的包(注:true为服务器接收的包;false为发出的包);// processed为false,表示本条消息没有被openfire处理过。这说明这是一条处女消息,也就是没有被处理过的消息。String strXML = packet.toXML();Document doc = null;try {doc = DocumentHelper.parseText(strXML);} catch (DocumentException e) {e.printStackTrace();}//1.1读取根标签Element rootElem = doc.getRootElement();//1.2获取标签的名称String rootName = rootElem.getName();
//        Element conElem = rootElem.element("contact");// 1.1 在标签上获取属性(根据属性的名称来获取属性值)String fromid = rootElem.attributeValue("from");String toid = rootElem.attributeValue("to");if (incoming && !processed) {if (packet instanceof Message) {if (fromid.equals("test@desktop-r4sp4pf/Spark")) {PacketRejectedException rejectedException = new PacketRejectedException();
//                        rejectedException.setRejectionMessage("the friend already in black.");throw rejectedException;}}}}
}

 

打包插件

如图所示,右侧ant中双击plugins。等程序运行完毕,jar包就在openfire源码包下的openfire_src\target\openfire\plugins文件夹里。

此时启动openfire服务器,在插件中打上断点即可以进入断点。

通过spark发送消息,可以进入消息拦截器方法中。

 

 

 

 

 

 

 

 

 

 

 

这篇关于(三)Openfire插件开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1049930

相关文章

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.