文档章节

Openfire 聊天服务器集成现有系统

gc87
 gc87
发布于 2014/06/05 14:10
字数 1090
阅读 229
收藏 0
点赞 0
评论 0

这里忽略安装以及配置Openfire数据库的过程,直接讲集成过程。

官方文档中提到的集成方法是在openfire\conf\openfire.xml文件中进行配置,但是实践过程中发现这种方式无效,官方论坛上提到,xml中的配置多半是无效的,还是要在数据库中进行配置,其实也就只是在Openfire中的一张表中配置罢了——ofproperty。

下面是安装配置好openfire之后,对ofproperty进行基本的验证、用户、用户组的集成,可根据自己的业务需求,直接修改set之后的变量值。字段的意思可以参照Openfire的官方文档来理解。

begin transaction
--clear existed field
delete from ofProperty where name in ('admin.authorizedJIDs', 'jdbcAuthProvider.passwordSQL', 'jdbcAuthProvider.passwordType',
    'jdbcProvider.connectionString', 'jdbcProvider.driver', 'jdbcUserProvider.allUsersSQL', 'jdbcUserProvider.emailField', 
    'jdbcUserProvider.loadUserSQL', 'jdbcUserProvider.nameField', 'jdbcUserProvider.userCountSQL', 'jdbcUserProvider.usernameField',
    'provider.admin.className', 'provider.auth.className', 'provider.group.className', 'provider.lockout.className', 'provider.securityAudit.className',
    'provider.user.className', 'provider.vcard.className', 'xmpp.auth.anonymous', 'xmpp.domain', 'xmpp.session.conflict-limit', 'xmpp.socket.ssl.active',
    'jdbcGroupProvider.groupCountSQL', 'jdbcGroupProvider.allGroupsSQL', 'jdbcGroupProvider.userGroupsSQL', 'jdbcGroupProvider.descriptionSQL',
    'jdbcGroupProvider.loadMembersSQL', 'jdbcGroupProvider.loadAdminsSQL');

--declare field values
declare @domain nvarchar(20);
declare @driver nvarchar(100);
declare @connect_str nvarchar(200);
declare @author nvarchar(50);

declare @pw_sql nvarchar(500);
declare @pw_type nvarchar(20);

declare @all_user_sql nvarchar(500);
declare @email_field nvarchar(20);
declare @name_field nvarchar(20);
declare @load_user_sql nvarchar(500);
declare @user_count_sql nvarchar(500);
declare @user_name_field nvarchar(20);

declare @group_count_sql nvarchar(500);
declare @all_group_sql nvarchar(500);
declare @user_group_sql nvarchar(500);
declare @description_sql nvarchar(500);
declare @load_members_sql nvarchar(500);
declare @load_admin_sql nvarchar(500);

set @domain = 'rjb11';
set @driver = 'org.postgresql.Driver';
set @connect_str = 'jdbc:postgresql://127.0.0.1:5432/myim?user=postgres&password=000000';
set @author = 'admin@gason';

set @pw_sql = 'select password from t_web_user where account=?';
set @pw_type = 'plain';

set @all_user_sql = 'select account from t_web_user';
set @email_field = 'email';
set @name_field = 'name';
set @load_user_sql = 'select account,email from t_web_user where account=?';
set @user_count_sql = 'select count(*) from t_web_user';
set @user_name_field = 'name';

set @group_count_sql = 'select count(*) from mygroups';
set @all_group_sql = 'select groupname from mygroups';
set @user_group_sql = 'select groupname from mygroupusers where username=?';
set @description_sql = 'select groupdescription from mygroups where groupname=?';
set @load_members_sql = 'select username from mygroupusers where groupname=? and isadmin=''N''';
set @load_admin_sql = 'select username from mygroupusers where groupname=? and isadmin=''Y''';

--insert settings
insert into ofproperty(name, propValue) values('provider.admin.className', 'org.jivesoftware.openfire.admin.DefaultAdminProvider');
insert into ofproperty(name, propValue) values('provider.auth.className', 'org.jivesoftware.openfire.auth.DefaultAuthProvider');
insert into ofproperty(name, propValue) values('provider.group.className', 'org.jivesoftware.openfire.group.DefaultGroupProvider');
insert into ofproperty(name, propValue) values('provider.lockout.className', 'org.jivesoftware.openfire.lockout.DefaultLockOutProvider');
insert into ofproperty(name, propValue) values('provider.securityAudit.className', 'org.jivesoftware.openfire.security.DefaultSecurityAuditProvider');
insert into ofproperty(name, propValue) values('provider.user.className', 'org.jivesoftware.openfire.user.DefaultUserProvider');
insert into ofproperty(name, propValue) values('provider.vcard.className', 'org.jivesoftware.openfire.vcard.DefaultVCardProvider');
insert into ofproperty(name, propValue) values('xmpp.auth.anonymous', 'true');
insert into ofproperty(name, propValue) values('xmpp.domain', @domain);
insert into ofproperty(name, propValue) values('xmpp.session.conflict-limit', '0');
insert into ofproperty(name, propValue) values('xmpp.socket.ssl.active', 'true');
                                        
insert into ofproperty(name, propValue) values('jdbcProvider.connectionString', @connect_str);
insert into ofproperty(name, propValue) values('jdbcProvider.driver', @driver);
insert into ofproperty(name, propValue) values('admin.authorizedJIDs', @author);                                           
insert into ofproperty(name, propValue) values('jdbcAuthProvider.passwordSQL', @pw_sql);
insert into ofproperty(name, propValue) values('jdbcAuthProvider.passwordType', @pw_type);

insert into ofproperty(name, propValue) values('jdbcUserProvider.allUsersSQL', @all_user_sql);
insert into ofproperty(name, propValue) values('jdbcUserProvider.emailField', @email_field);
insert into ofproperty(name, propValue) values('jdbcUserProvider.loadUserSQL', @load_user_sql);
insert into ofproperty(name, propValue) values('jdbcUserProvider.nameField', @name_field);
insert into ofproperty(name, propValue) values('jdbcUserProvider.userCountSQL', @user_count_sql);
insert into ofproperty(name, propValue) values('jdbcUserProvider.usernameField', @user_name_field);

insert into ofproperty(name, propValue) values('jdbcGroupProvider.groupCountSQL', @group_count_sql);
insert into ofproperty(name, propValue) values('jdbcGroupProvider.allGroupsSQL', @all_group_sql);
insert into ofproperty(name, propValue) values('jdbcGroupProvider.userGroupsSQL', @user_group_sql);
insert into ofproperty(name, propValue) values('jdbcGroupProvider.descriptionSQL', @description_sql);
insert into ofproperty(name, propValue) values('jdbcGroupProvider.loadMembersSQL', @load_members_sql);
insert into ofproperty(name, propValue) values('jdbcGroupProvider.loadAdminsSQL', @load_admin_sql);

update ofproperty set propValue ='org.jivesoftware.openfire.auth.JDBCAuthProvider' where name='provider.auth.className';

update ofproperty set propValue='org.jivesoftware.openfire.user.JDBCUserProvider' where name='provider.user.className';

update ofproperty set propValue='org.jivesoftware.openfire.group.JDBCGroupProvider' where name='provider.group.className';
rollback transaction

集成用户组以后,在聊天客户端中可以获取相关的组,但是不可直接针对群组发消息,如果要对群组发消息得先获取群组成员列表,然后循环分别发送。其实Openfire服务器可以帮我们完成消息的分发,只需针对群组id发送一条消息,剩下的任务完全可以交代给Openfire服务器完成,在系统的管理界面中安装其官方提供的广播插件:broadcast.jar,这个插件也提供了比较完善的文档参考,可在Openfire官方网站上查看,执行以下sql语句:

begin transaction
--broadcase service name
insert into ofproperty(name, propValue) values('plugin.broadcast.serviceName', 'broadcast');
--是否允许所有用户拥有给组发消息的权限,true为允许,false管理员有发送权限
insert into ofproperty(name, propValue) values('plugin.broadcast.disableGroupPermissions', 'true');
--是否允许组内用户发送广播消息
insert into ofproperty(name, propValue) values('plugin.broadcast.groupMembersAllowed', 'true');
--
--insert into ofproperty(name, propValue) values('plugin.broadcast.allowedUsers', '');
--设置是否给离线的用户发消息,true发送
insert into ofproperty(name, propValue) values('plugin.broadcast.all2offline', 'true');
--设置消息的附加前缀
insert into ofproperty(name, propValue) values('plugin.broadcast.messagePrefix', '');
rollback transaction

至此集成完成。

author:gaoc

email:sfme@qq.com

转载请注明出处:http://my.oschina.net/u/1438460/blog/273250

© 著作权归作者所有

共有 人打赏支持
gc87
粉丝 1
博文 7
码字总数 4099
作品 1
昆明
程序员
共享和出售即时通讯源代码,类似微信陌陌,全新定义基于Tiagse的社交聊天系统

这套IM系统是我个人自主开发 完全基于Tiagse ,主要功能为:Android、iOS和服务端,可以支持包括文字 图片,语音等任何消息形式,系统采用的成熟的XMPP协议+CentOS 6.5+Jdk1.8+mysql5.6+mon...

iholdcode ⋅ 2015/08/13 ⋅ 4

基于开源 Openfire 聊天服务器 - 开发Openfire 聊天记录插件

上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfire插件。一步步很详细的介绍到简单插件开发,带Servlet的插件的开发、带JSP页面插...

ibm_hoojo ⋅ 2013/03/29 ⋅ 0

Android Push 开源方案解析

在 Android 上,因为 Google 自己实现的 Android 标配的 GCM (Google Cloud Messaging,原来叫 C2DM) 在国内基本不可用,所以,对于开发者来说,如果需要 Push功能,怎么样选择成为了一个问题...

极光推送 ⋅ 2012/11/30 ⋅ 85

openfire集成已有数据库

0问题场景 假如我们有一个网站并且已经有了上百万的注册用户,现在要集成一个IM即时聊天功能,假如我们使用开源的xmpp服务器,都会自动生成默认的数据库以及表结构,用已有数据库的用户表去初...

蛙牛 ⋅ 2014/04/24 ⋅ 2

Android Push开源解决方案

在 Android 上,因为 Google 自己实现的 Android 标配的 GCM (Google Cloud Messaging,原来叫 C2DM) 在国内基本不可用,所以,对于开发者来说,如果需要 Push功能,怎么样选择成为了一个问题...

雨焰 ⋅ 2012/10/23 ⋅ 4

移动应用(手机应用)开发IM聊天程序解决方案

这个解决方法已经定制下来很久了,上一段时间比较忙,没有时间整这些东西。最近稍微好 些,不怎么加班。所以抽空总结下,同时也分享给大家,也算是给大家一个借鉴吧!或许这并不是最好的解决...

天下杰论 ⋅ 2014/07/17 ⋅ 0

移动应用(手机应用)开发IM聊天程序解决方案

这个解决方法已经定制下来很久了,上一段时间比较忙,没有时间整这些东西。最近稍微好些,不怎么加班。所以抽空总结下,同时也分享给大家,也算是给大家一个借鉴吧!或许这并不是最好的解决方...

ibm_hoojo ⋅ 2012/07/31 ⋅ 0

XMPP聊天之Openfire 的安装和配置---Mac OS

一、下载并安装openfire 1、下载最新的openfire安装文件 官方下载站点:http://www.igniterealtime.org/downloads/index.jsp#openfire   openfire是服务器,下面还有一个spark,这个是一个...

嘻哈开发者 ⋅ 2014/11/03 ⋅ 0

Spark IM 2.7.0 发布,即时通讯客户端

Spark 2.7.0 发布了,该版本要求服务器端必须是 Openfire 3.10.0。主要是解决之前老版本 2.6.3 连接到新的服务器版本问题。 Spark是一个开源,跨平台IM客户端。它的特性支持集组聊天,电话集...

oschina ⋅ 2015/04/25 ⋅ 7

Openfire 的安装和配置

1、 下载最新的openfire安装文件 官方下载站点:http://www.igniterealtime.org/downloads/index.jsp#openfire 下载地址: Exe:http://www.igniterealtime.org/downloads/download-landing.......

ibm_hoojo ⋅ 2012/05/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

20.zip压缩 tar打包 打包并压缩

6月25日任务 6.5 zip压缩工具 6.6 tar打包 6.7 打包并压缩 6.5 zip压缩工具: zip支持压缩目录 zip压缩完之后原来的文件不删除 不同的文件内容其实压缩的效果不一样 文件内有很多重复的用xz压...

王鑫linux ⋅ 9分钟前 ⋅ 0

double类型数据保留四位小数的另一种思路

来源:透析公式处理,有时候数据有很长的小数位,有的时候由在四位以内,如果用一般的处理方法,那么不足四位的小树会补充0到第四位,这样子有点画蛇添足的感觉,不太好看。所以要根据小数的...

young_chen ⋅ 15分钟前 ⋅ 0

Python 优化 回溯下降算法

使用sympy构造表达式,实现回溯下降算法 画出函数图像,先使用暴力搜索,找到最小值约为2.5左右 然后选定初始点,开始进行回溯搜索,下降方向为负梯度方向 下降的误差与步数大致呈现下面的状...

阿豪boy ⋅ 20分钟前 ⋅ 0

Django配置163邮箱出现 authentication failed(535)错误解决方法

最近用Django写某网站,当配置163邮箱设置完成后,出现535错误即:smtplib.SMTPAuthenticationError: (535, b'Error: authentication failed') Django初始配置邮箱设置 EMAIL_HOST = "smtp.1...

陈墨轩_CJX ⋅ 21分钟前 ⋅ 0

用接口模拟可伸缩枚举(34)

1、枚举的可伸缩性最后证明都不是什么好点子 扩展类型的元素是基本类型实例,基本类型的实例却不是扩展类型的元素,很混乱 目前还没有很好的方法来枚举基本类型的所有元素,及其扩展 可伸缩性...

职业搬砖20年 ⋅ 25分钟前 ⋅ 0

Ubuntu18.04 IDEA快捷键无法使用

IDEA默认的回退到上一视图的快捷键是Ctrl + Alt + Left,在ubuntu中这个快捷键被占用了,在16.04中可以在界面中取消这个快捷键,但是18.04就看不到了,可以使用以下命令解决 gsettings set ...

Iceberg_XTY ⋅ 29分钟前 ⋅ 0

如何解决s权限位引发postfix及crontab异常

一、问题现象 业务反馈某台应用服务器,普通用户使用mutt程序发送邮件时,提示“postdrop warning: mail_queue_enter: create file maildrop/713410.6065: Permission denied”,而且普通用法...

问题终结者 ⋅ 41分钟前 ⋅ 0

Unable to load database on disk

由于磁盘空间满了以后,导致zookeeper异常退出,清理磁盘空间后,zk启动报错,信息如下: 2018-06-25 17:18:46,904 INFO org.apache.zookeeper.server.quorum.QuorumPeerConfig: Reading co...

刀锋 ⋅ 今天 ⋅ 0

css3 box-sizing:border-box 实现div一行多列

<!DOCTYPE html><html><head><style> div.container{ background:green; padding:10px 10px;}div.box{box-sizing:border-box;-moz-box-sizing:border-box; /* Fir......

qimh ⋅ 今天 ⋅ 0

Homebrew简介和基本使用

一、Homebrew是什么 Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径...

说回答 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部