参考:http://myopenfire.com/article/getarticle/9

package com.myopenfire.plugin;import java.io.File;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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xmpp.packet.Message;
import org.xmpp.packet.Packet;/*** 过滤插件:当body中有fuck时,将消息截断,不转发消息。**/
public class MessageFilterPlugin implements Plugin ,PacketInterceptor{
// A:生成一个日志实例,用于打印日志,日志被打印在openfire_src\target\openfire\logs目录中private static final Logger Log = LoggerFactory.getLogger(MessageFilterPlugin.class);//B: 消息拦截器private InterceptorManager interceptorManager;//C: 插件初始化函数
    @Overridepublic void initializePlugin(PluginManager manager, File pluginDirectory) {Log.info("MessageFilter init");// 将当前插件加入到消息拦截管理器(interceptorManager )中,当消息到来或者发送出去的时候,会触发本插件的interceptPacket方法。interceptorManager = InterceptorManager.getInstance();interceptorManager.addInterceptor(this);}//D: 插件销毁函数
    @Overridepublic void destroyPlugin() {Log.info("MessageFilter destory");
// 当插件被卸载的时候,主要通过openfire管理控制台卸载插件时,被调用。注意interceptorManager的addInterceptor和removeInterceptor需要成对调用。interceptorManager.removeInterceptor(this);}//E 插件拦截处理函数
    @Overridepublic void interceptPacket(Packet packet, Session session,boolean incoming, boolean processed)throws PacketRejectedException {// incoming表示本条消息刚进入openfire。processed为false,表示本条消息没有被openfire处理过。这说明这是一条处女消息,也就是没有被处理过的消息。if (incoming && processed == false) {
// packet可能是IQ、Presence、Message,这里当packet是message的时候,进行处理。if (packet instanceof Message) {
// 将packet强制转换为MessageMessage msg = (Message)packet;
// 取得message中的body内容,就是消息正文String body = msg.getBody();// 如果内容中包含fuck,则拒绝处理消息if(body != null  && body.contains("fuck")){// F: 这里通过抛出异常的方式,来阻止程序流程继续执行下去。PacketRejectedException rejectedException =  new PacketRejectedException();rejectedException.setRejectionMessage("fuck is error");throw rejectedException;}}}}}

openfire过滤脏话插件,控制消息是否发送相关推荐

  1. 【Unity】文字游戏制作插件Fungus教程(6)碰撞触发和消息的发送和接收

    如果在开发3D项目的时候 我们还可以用到Fungus插件来丰富我们游戏的内容 比如游戏的操作方法等提示信息我们完全可以使用碰撞和消息的接收和发送来触发提示语句 我举一个例子比如开发一个没有地图指示的探 ...

  2. ICMP (互联网控制消息协议 )是什么

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 互联网控制消息协议(英语:Internet Control Message Protocol,缩写: ...

  3. 消息队列消息丢失和消息重复发送的处理策略

    分布式事务 什么是分布式事务 我们的服务器从单机发展到拥有多台机器的分布式系统,各个系统之前需要借助于网络进行通信,原有单机中相对可靠的方法调用以及进程间通信方式已经没有办法使用,同时网络环境也是不稳 ...

  4. AUTOSAR DiagnosticLogAndTrace DLT(三)-- 消息的发送、DLT命令的发送与接收

    从本文章您将了解到: Log和Trace报文的发送过程 发送接口 DLT命令的发送与接收过程与接口 一.发送Log和Trace报文 下图基本描述了如何在通信总线上发送DLT报文的过程 3.0. 发送的 ...

  5. 2.RabbitMQ 的可靠性消息的发送

      本篇包含 1. RabbitMQ 的可靠性消息的发送 2. RabbitMQ 集群的原理与高可用架构的搭建 3. RabbitMQ 的实践经验   上篇包含 1.MQ 的本质,MQ 的作用 2.R ...

  6. 详解,最新整理,RabbitMQ,RocketMQ,Kafka 事务性,消息丢失,消息顺序性和消息重复发送的处理策略

    消息队列常见问题处理 分布式事务 什么是分布式事务 我们的服务器从单机发展到拥有多台机器的分布式系统,各个系统之前需要借助于网络进行通信,原有单机中相对可靠的方法调用以及进程间通信方式已经没有办法使用 ...

  7. RabbitMQ,RocketMQ,Kafka 事务性,消息丢失,消息顺序性和消息重复发送的处理策略

    消息队列常见问题处理 分布式事务 什么是分布式事务 我们的服务器从单机发展到拥有多台机器的分布式系统,各个系统之前需要借助于网络进行通信,原有单机中相对可靠的方法调用以及进程间通信方式已经没有办法使用 ...

  8. mfc 开启指定服务器,用MFC实现消息的发送和接收(含服务器)

    <用MFC实现消息的发送和接收(含服务器)>由会员分享,可在线阅读,更多相关<用MFC实现消息的发送和接收(含服务器)(33页珍藏版)>请在人人文库网上搜索. 1.精品好资料学 ...

  9. 如何在优雅地Spring 中实现消息的发送和消费

    本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节,然后通过一个 ...

最新文章

  1. 此代码募集最优秀的答案
  2. 中国首个工业云平台发布 徐工阿里华为联合打造
  3. 解决:EXCEL复制粘贴,精度丢失
  4. Java,JavaFX的流利设计风格文本字段和密码字段
  5. 09产品经理要明白的人性思维-营销推广篇
  6. 【今日CV 视觉论文速览】30 Nov 2018
  7. Rancher2.x流水线自动化部署
  8. 3.过滤——简单移动平均线概念(SMA)、SMA的假设、加权移动平均线概念(WMA)_1
  9. 实时控制软件第二次作业
  10. 春季高考计算机专业专业分值,春季高考总分多少 分值分布情况如何
  11. 编译安装mysql 不动了_编译安装MySQL5.6失败的相关问题解决方案
  12. Flutter 自定义图片按钮,按下效果及按键音效
  13. 关于UnityHub更换位置后找不到编辑器以及登录界面白屏的问题
  14. MySql 磁盘满了的处理
  15. 家族谱树形数据结构实现
  16. 分享电脑日常使用的小技巧
  17. 中国象棋棋盘java_如何用java swing 实现中国象棋的棋盘。棋盘就好。。。
  18. 我参加 NVIDIA Sky Hackathon---语音识别+前端设计
  19. elo匹配算法c语言,王者荣耀elo算法被淘汰?全新匹配算法开测
  20. 刘轩:教你改善自己的生活习惯

热门文章

  1. PocketSphinx语音识别系统的编程
  2. OpenCV3学习(12.3) kalman滤波器
  3. 2019年CSDN博客前十排名
  4. PAT乙级 1022 D进制的A+B
  5. python OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized
  6. PTA最大子列和问题
  7. c语言最短延时程序,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写...
  8. docker pull 下载一半_Docker三个重要的基本操作,镜像,容量,仓库
  9. padding三个值含义
  10. string int 相互转换