参考: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: 插件初始化函数
@Override
public void initializePlugin(PluginManager manager, File pluginDirectory) { Log.info("MessageFilter init");
// 将当前插件加入到消息拦截管理器(interceptorManager )中,当消息到来或者发送出去的时候,会触发本插件的interceptPacket方法。
interceptorManager = InterceptorManager.getInstance();
interceptorManager.addInterceptor(this);
} //D: 插件销毁函数
@Override
public void destroyPlugin() {
Log.info("MessageFilter destory");
// 当插件被卸载的时候,主要通过openfire管理控制台卸载插件时,被调用。注意interceptorManager的addInterceptor和removeInterceptor需要成对调用。
interceptorManager.removeInterceptor(this);
} //E 插件拦截处理函数
@Override
public 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强制转换为Message
Message 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. openfire广播broadcast插件怎么发送消息给所有用户(包括在线和离线)

    openfire广播broadcast插件怎么发送消息给所有用户(包括在线和离线): 打开openfire管理界面,找到服务器系统属性,添加一个属性(属性名:plugin.broadcast.all2 ...

  2. 开源一个Java Class实现Openfire登陆、推出、消息发送,方便其他系统集成IM功能了

    开源一个Java Class实现Openfire登陆.推出.消息发送 N年前写的,希望对Openfire开发新手有帮助哦 import java.util.*; import java.io.*;   ...

  3. Openfire 是怎么存离线消息

    原文:http://myopenfire.com/article/getarticle/26 1.openfire默认怎么存离线消息   在默认情况下,不添加任何插件的情况下,当用户不在线,对于发送给 ...

  4. openfire :openfire 不同类型插件的开发示例

    新建一个自己的Javaproject工程,添加的jar包如下: 将jasper-compiler.jar.jasper-runtime.jar.servlet.jar添加到新建的工程中.如果没有jar ...

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

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

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

    消息队列常见问题处理 分布式事务 什么是分布式事务 常见的分布式事务解决方案 基于 MQ 实现的分布式事务 本地消息表-最终一致性 MQ事务-最终一致性 RocketMQ中如何处理事务 Kafka中如 ...

  7. [转]PhoneGap使用PushPlugin插件实现消息推送

    本文转自:http://my.oschina.net/u/1270482/blog/217661 http://devgirl.org/2013/07/17/tutorial-implement-pu ...

  8. TreeView控制消息

    控制消息的作用 通过发送消息到Treeview控件, 就能够控机Treeview控件.常用的控制有: 获取被点击的节点 获取节点的文本 设置节点的文本 获取节点的父节点 获取节点的子节点 TVM_GE ...

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

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

随机推荐

  1. Windows手动添加开机启动项

    @方法1. 添加程序完整路径到注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run下 或者添加到HKEY_CURREN ...

  2. python中zip函数

    zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表.(在海豚实习时自己写了一个要用到zip的函数,那个例子非常代表性) 示例1 for i,j in zip(range(3) ...

  3. Android中直播视频技术探究之---采集摄像头Camera视频源数据进行推流(采用金山云SDK)

    一.前言 在之前已经详细介绍了Android中的一种视频数据源:Camera,不了解的同学可以点击进入:Android中Camera使用详解 ,在这篇文章中我们介绍了如何采集摄像头的每一帧数据,然后进 ...

  4. 巧用ViewPager 打造不一样的广告轮播切换效果

    一.概述 如果大家关注了我的微信公众号的话,一定知道我在5月6号的时候推送了一篇文章,文章名为Android超高仿QQ附近的人搜索展示(一),通过该文可以利用ViewPager实现单页显示多个Item ...

  5. 2016年11月14日 星期一 --出埃及记 Exodus 20:5

    2016年11月14日 星期一 --出埃及记 Exodus 20:5 You shall not bow down to them or worship them; for I, the LORD y ...

  6. java实现按拼音排序名称

    private static String[] nameArray = {"张三","李四","王二","付火"}; @ ...

  7. noip2011提高组day1+day2解题报告

    Day1 T1铺地毯https://www.luogu.org/problem/show?pid=1003 [题目分析] 全部读入以后从最后一个往前找,找到一个矩形的范围覆盖了这个点,那这个矩形就是最 ...

  8. CentOS 6.3下源码安装LAMP(Linux+Apache+Mysql+Php)环境

    一.简介 什么是LAMP    LAMP是一种Web网络应用和开发环境,是Linux, Apache, MySQL, Php/Perl的缩写,每一个字母代表了一个组件,每个组件就其本身而言都是在它所代 ...

  9. List<T>

    List<FormEntity> formEntity = new List<FormEntity> (){new FormEntity{ IsFile = true,Name ...

  10. Eclipse常用快捷键windows

    Ctrl+1:快速修正Ctrl+W: 关闭当前文件ctrl+O:打开outlineCtrl+D: 删除当前行 Ctrl+L: 定位在某行Ctrl+Q:转到上次修改位置Ctrl+/:注释代码Ctrl+H ...