OpenFire 屏蔽注册
来源:互联网 发布:java面向对象思维导图 编辑:程序博客网 时间:2024/05/01 00:55
首先你得会自己拓展插件,这里就不多说了。各种百度,一搜一大片,,,
进入正题,代码如下,仅供参考,亲测没问题:
package org.jivesoftware.openfire.plugin;
import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Date;
import org.dom4j.Element;
import org.jivesoftware.database.DbConnectionManager;
import org.jivesoftware.openfire.XMPPServer;
import org.jivesoftware.openfire.container.Plugin;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.interceptor.PacketInterceptor;
import org.jivesoftware.openfire.interceptor.PacketRejectedException;
import org.jivesoftware.openfire.session.Session;
import org.jivesoftware.openfire.user.DefaultUserProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xmpp.packet.IQ;
import org.xmpp.packet.Packet;
import org.jivesoftware.openfire.interceptor.InterceptorManager;
import org.jivesoftware.util.StringUtils;
public class Sample implements PacketInterceptor,Plugin
{
private static final Logger Log = LoggerFactory.getLogger(DefaultUserProvider.class);private XMPPServer server;//以下对ofProperty表的操作,都是用来配置后台,只需要配置数据库连接即可 private static final String INSERT_ofProperty = "INSERT INTO ofProperty (name,propValue)" + "VALUES (?,?)";private static final String PropValue = "SELECT propValue FROM ofProperty WHERE `name`='provider.user.className '";private static final String UPDATE_ofProperty ="UPDATE ofProperty SET propValue=? WHERE name=?"; //用户表添加字段 根据个人需求 private static final String Add_UserID = "alter table ofuser add userid varchar(50)";@Overridepublic void initializePlugin(PluginManager manager, File pluginDirectory) { // TODO Auto-generated method stub server=XMPPServer.getInstance(); InterceptorManager.getInstance().addInterceptor(this); System.out.println("连接成功"+server.getServerInfo()); //provider.user.className 这里只需要把表中对应value换成自己插件中重写的注册方法就可以了,,,当然我这么做的目的是想通过平台原有的服务端,注册成功后再走一遍openfire注册,保证双方数据同步。这个地方各有所需,根据自己的需要配置吧。 String name="provider.user.className"; String propValue="org.jivesoftware.openfire.plugin.PaasRegistered"; if (getPropValue().equals("")) { inisertProperty(name,propValue); } else { System.out.print("存在 字段"+getPropValue()); UpdateProperty(propValue,name); } //这个地方本来是需要验证数据库知否存在所要添加的字段,没办法,我太懒,所以就和上面换了一下位置,亲测无误。哈哈 addUserid();}//插入userid -- ofuserpublic void addUserid() { Connection con = null; PreparedStatement pstmt = null; try { con = DbConnectionManager.getConnection(); pstmt = con.prepareStatement(Add_UserID); pstmt.execute(); } catch (SQLException e) { throw new RuntimeException(e); } finally { DbConnectionManager.closeConnection(pstmt, con); } }//插入ofPropertypublic void inisertProperty(String name,String propValue) { Connection con = null; PreparedStatement pstmt = null; try { con = DbConnectionManager.getConnection(); pstmt = con.prepareStatement(INSERT_ofProperty); pstmt.setString(1, name); pstmt.setString(2, propValue); pstmt.execute(); } catch (SQLException e) { throw new RuntimeException(e); } finally { DbConnectionManager.closeConnection(pstmt, con); } }//修改ofPropertypublic void UpdateProperty(String propValue,String name ) { Connection con = null; PreparedStatement pstmt = null; try { con = DbConnectionManager.getConnection(); pstmt = con.prepareStatement(UPDATE_ofProperty); pstmt.setString(1, propValue); pstmt.setString(2,name );
// pstmt.execute();
pstmt.executeUpdate();
}
catch (SQLException e) {
throw new RuntimeException(e);
}
finally {
DbConnectionManager.closeConnection(pstmt, con);
}
}
//获取ofProperty–propValue
public String getPropValue() {
String str = “”;
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
con = DbConnectionManager.getConnection();
pstmt = con.prepareStatement(PropValue);
rs = pstmt.executeQuery();
if (rs.next()) {
str = rs.getNString(1);
}
}
catch (SQLException e) {
Log.error(e.getMessage(), e);
}
finally {
DbConnectionManager.closeConnection(rs, pstmt, con);
}
return str;
}
@Override public void interceptPacket(Packet packet, Session session, boolean incoming, boolean processed) throws PacketRejectedException{ System.out.println("接收到的消息内容:"+packet.toXML()); IQ qq=(IQ)packet; Element childElement = qq.getChildElement(); String namespace = childElement.getNamespaceURI(); //这里我就用了这个粗暴的方法干掉了原有的注册,自己可以用spark测试就知道了。 if(namespace.indexOf("register") != -1) { throw new PacketRejectedException("禁止"); }}@Overridepublic void destroyPlugin() { // TODO Auto-generated method stub System.out.println("Sample.destroyPlugin() 停止");}
}
以上仅供参考,本人转JAVA不久,代码写的不够严谨,质量较差,勿喷。如有好的方式方法,请大家多多指点,谢谢。
————————————————————–小白——————————————————————————
- OpenFire 屏蔽注册
- openfire spark 注册流程
- openfire 用户注册过程 服务器端
- openfire 用户注册过程 服务器端
- openfire+smack新用户注册、更改用户状态
- openfire 注册用户加密方法解析
- openfire 3.7 压力测试一(注册)
- Openfire注册流程代码分析(转)
- openfire 注册用户加密方法解析
- openfire 3.7 压力测试一(注册)
- OpenFire源码学习之六:用户注册
- VC如何注册、屏蔽全局键盘热键
- VC如何注册、屏蔽全局键盘热键
- 屏蔽网易博客碍眼的注册窗口
- openfire mysql 转mongo 注册行为性能测试及其他
- openfire中用email作用户名注册的解决方案
- 使用php实现openfire的用户数据注册
- 利用strophe.js +nginx 在openfire服务器注册用户
- Bitmap createBitmap参数(三)
- 配置Tomcat使用https协议(配置SSL协议)
- 使用git将本地代码上传到github
- HDU 4417 (主席树)
- Solr 6.0 安装部署
- OpenFire 屏蔽注册
- 求算(n^n)%10
- C++ 笔记3:伪函数
- 再读epoll有感
- JQuery搜索弹出框
- struts2注解
- C++多线程记录1
- 使用整数类型处理货币
- Neural Networks and Deep Learning 学习笔记(一)