转自: http://zoeyyoung.gitcafe.com/openfire-xmpp-database.html
参考文档:
官方文档
Custom Database Integration Guide
——参考该文档介绍需要配置的参数, 在conf/openfire.xml中编辑属性, 实际为在管理控制台或数据库中添加系统属性
背景
假设已存在MySQL数据库office, 且数据库中有3张表users(用户表)、groups(分组表)和groupusers(用户所属分组表)
目标
使用office数据库中的users、groups、groupusers表替代Openfire中的ofuser、ofgroup、ofgroupuser三个表, 从而整合现有系统用户
users表包含的属性(对应于Openfire原数据库中的ofuser表):
属性名 | 说明 |
uid | 用于登录,假如uid为admin,则jid为admin@domain |
name | 用户名 |
pwd | 密码 |
电子邮件 |
CREATE TABLE `users` (
`uid` varchar(64) NOT NULL,
`pwd` varchar(32) DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
groups表包含的属性(对应于Openfire原数据库中的ofgroup表):
属性名 | 说明 |
groupName | 组名 |
description | 描述 |
CREATE TABLE `groups` (
`groupName` varchar(50) NOT NULL,
`description` varchar(255) DEFAULT NULL,
PRIMARY KEY (`groupName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
groupusers表包含的属性(对应于Openfire原数据库中的ofgroupuser表):
属性名 | 说明 |
groupName | 对应于groups表的groupName |
uid | 对应于user表的uid |
admin | 是否是管理员, 1是, 0否 |
CREATE TABLE `groupusers` (
`groupName` varchar(50) NOT NULL,
`uid` varchar(100) NOT NULL,
`admin` tinyint(4) NOT NULL,
PRIMARY KEY (`groupName`,`uid`,`admin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
注:表中属性名不一定要一样, 关键是“说明”部分, 此处参考Openfire原有数据库中的表创建
进入Openfire管理控制台-》服务器-》服务器管理器-》系统属性, 默认系统属性:
属性名 | 说明 | 属性值 |
httpbind.enabled | true | |
passwordKey | hidden | |
provider.admin.className | org.jivesoftware.openfire.admin.DefaultAdminProvider | |
provider.auth.className | 验证 | org.jivesoftware.openfire.auth.DefaultAuthProvider |
provider.group.className | 组相关 | org.jivesoftware.openfire.group.DefaultGroupProvider |
provider.lockout.className | org.jivesoftware.openfire.lockout.DefaultLockOutProvider | |
provider.securityAudit.className | 用户相关 | org.jivesoftware.openfire.security.DefaultSecurityAuditProvider |
provider.user.className | org.jivesoftware.openfire.user.DefaultUserProvider | |
provider.vcard.className | org.jivesoftware.openfire.vcard.DefaultVCardProvider | |
update.lastCheck | 1351559310961 | |
xmpp.auth.anonymous | true | |
xmpp.domain | 域名,服务器IP | 192.168.0.46 |
xmpp.httpbind.scriptSyntax.enabled | true | |
xmpp.session.conflict-limit | 0 | |
xmpp.socket.ssl.active | true |
首先修改三个属性(openfire提供了支持JDBC相关的Provider, 可以从其它的数据源获取用户/组数据):
属性名 | 属性值 |
provider.auth.className | org.jivesoftware.openfire.auth.JDBCAuthProvider |
provider.group.className | org.jivesoftware.openfire.group.JDBCGroupProvider |
provider.user.className | org.jivesoftware.openfire.user.JDBCUserProvider |
接着配置数据源(添加系统属性, 这里使用的是mysql数据库):
属性名 | 说明 | 属性值 |
jdbcProvider.driver | 数据源驱动 | com.mysql.jdbc.Driver |
jdbcProvider.connectionString | 连接字符串,需要集成的数据库地址 | jdbc:mysql://localhost:3306/office?user=root&password=123456 |
这里的配置可参考
其中, 相应数据库的driver必须放在Openfire安装目录的"lib/"文件夹中(默认安装Openfire后就有了)。
对每一个JDBC Provider需要添加相关系统属性
JDBCAuthProvider
属性名 | 说明 | 输入值 | 输出列 | 属性值 |
jdbcAuthProvider.passwordSQL | 获取用户密码的SQL | 登录名 | 密码 | select pwd from users where uid=? |
jdbcAuthProvider.passwordType | 密码类型 | plain(文本) | md5 | sha1 | sha256 |sha512, 如果密码加密不为前面几种, 就需要自己提供一个AuthProvide, 如果没有设置, 默认为plain |
JDBCUserProvider
属性名 | 说明 | 输入值 | 输出列 | 属性值 |
jdbcUserProvider.allUsersSQL | 获取所有用户 | 用户的uid | select uid from users | |
jdbcUserProvider.loadUserSQL | 获取用户信息 | 用户uid | 用户名,email | select name,email from users where uid=? |
jdbcUserProvider.userCountSQL | 获取用户数量 | 用户数量 | select count(*) from users | |
jdbcUserProvider.searchSQL | !!这边略有疑问!! | select uid from users where | ||
jdbcUserProvider.usernameField | 指定用户登录名的列名 | uid | ||
jdbcUserProvider.nameField | 指定用户名称的列名 | name | ||
jdbcUserProvider.emailField | 指定用户email的列名 |
JDBCGroupProvider
属性名 | 说明 | 输入值 | 输出列 | 属性值 |
jdbcGroupProvider.allGroupsSQL | 获取所有组的SQL | 组名 | select groupName from groups | |
jdbcGroupProvider.descriptionSQL | 获取组描述 | 组名 | 组描述 | select description from groups where groupName=? |
jdbcGroupProvider.groupCountSQL | 获取组的数量 | 组的数量 | select count(*) from groups | |
jdbcGroupProvider.loadAdminsSQL | 获取组的管理员 | 组名 | 组管理员 | select uid from groupusers where groupName=? andadmin=1 |
jdbcGroupProvider.loadMembersSQL | 获取组的成员 | 组名 | 组成员uid | select uid from groupusers where groupName=? andadmin=0 |
jdbcGroupProvider.userGroupsSQL | 获取成员的组 | 成员uid | 成员所属组名 | select groupName from groupusers where uid=? |
注意:其中获取组的管理员和组的成员中的判断要根据相应系统修改, 我这边假设admin值为1时是管理员, 值为0时是成员
最后, 配置新的管理员用户(应该在users表中添加一个用户作为管理员)
属性名 | 说明 | 属性值 |
admin.authorizedJIDs | 指定新数据源中的管理员用户, 注意是是完整JID(user@域名) | admin@192.168.0.46 |
注:官方文档写的配置admin.authorizedUsernames, 但是配置后似乎不起效果
注:表中红色字体部分为需要根据具体数据库进行修改的部分.
配置好后, 重启Openfire。
使用admin.authorizedJIDs中的用户名登录Openfire管理控制台(admin.authorizedJIDs配置为admin@192.168.0.46, 则用户名为admin).
如果配置成功, 进入Openfire管理控制台-》用户/组就可以看到你数据源中的用户/组信息了。
注: 在修改添加系统属性的过程中, 若无法登录Openfire管理控制台, 可直接修改Openfire数据库中的ofproperty表.
懒惰的程序猿——使用SQL语句修改
;
;//-----------------------------------------------------------------------------------------------------------
UPDATE `openfire`.`ofProperty` SET propValue='org.jivesoftware.openfire.auth.JDBCAuthProvider' WHERE name='provider.auth.className';
UPDATE `openfire`.`ofProperty` SET propValue='org.jivesoftware.openfire.group.JDBCGroupProvider' WHERE name='provider.group.className';
UPDATE `openfire`.`ofProperty` SET propValue='org.jivesoftware.openfire.user.JDBCUserProvider' WHERE name='provider.user.className';
INSERT INTO `openfire`.`ofProperty` VALUES
('jdbcProvider.driver', 'com.mysql.jdbc.Driver'),
('jdbcProvider.connectionString', 'jdbc:mysql://localhost:3306/office?user=root&password=123456'),
('admin.authorizedJIDs', 'admin@localhost,admin@192.168.0.46'),
('jdbcAuthProvider.passwordSQL', 'SELECT pwd FROM users WHERE uid=?'),
('jdbcAuthProvider.passwordType', 'plain'),
('jdbcUserProvider.allUsersSQL', 'SELECT uid FROM users'),
('jdbcUserProvider.loadUserSQL', 'SELECT name,email FROM users WHERE uid=?'),
('jdbcUserProvider.userCountSQL', 'SELECT COUNT(*) FROM users'),
('jdbcUserProvider.searchSQL', 'SELECT uid FROM users WHERE'),
('jdbcUserProvider.usernameField', 'uid'),
('jdbcUserProvider.nameField', 'name'),
('jdbcUserProvider.emailField', 'email');
('jdbcGroupProvider.allGroupsSQL', 'SELECT groupName FROM groups'),
('jdbcGroupProvider.descriptionSQL', 'SELECT description FROM groups WHERE groupName=?'),
('jdbcGroupProvider.groupCountSQL', 'SELECT COUNT(*) FROM groups'),
('jdbcGroupProvider.loadAdminsSQL', 'SELECT uid FROM groupusers WHERE groupName=? AND admin=1'),
('jdbcGroupProvider.loadMembersSQL', 'SELECT uid FROM groupusers WHERE groupName=? AND admin=0'),
('jdbcGroupProvider.userGroupsSQL', 'SELECT groupName from groupusers WHERE uid=?');
;//-----------------------------------------------------------------------------------------------------------
相关推荐
### Openfire集成用户数据库知识点详解 #### 一、引言 在企业级即时通讯系统部署过程中,为了确保数据的一致性和提高用户体验,通常会遇到一个关键需求:将Openfire服务器与现有的用户数据库进行集成。这样的集成...
这是一个OpenFire集成Oracle数据库来集成现有系统中的用户管理时的ofproperty表信息
标题中的“openfire扩展整合现有系统用户”是指在Openfire这款开源即时通讯服务器上,将已有的用户系统(如企业内部的LDAP、AD等)与Openfire进行集成,实现用户身份验证和管理的一体化。Openfire是一款基于Java开发...
在企业环境中,通常需要将Openfire与现有的用户管理系统进行整合,以便利用已有的用户数据,如LDAP(轻量级目录访问协议)或数据库中的用户信息。本文将详细介绍如何将Openfire与现有的用户资源进行整合,并扩展其...
9. **API 接口**:对于开发者,Openfire提供了丰富的API,允许开发自定义的应用程序或集成到现有系统中。 10. **社区支持**:作为开源项目,Openfire有一个活跃的社区,用户可以在官方论坛上寻求帮助、报告问题或...
10. **API与开发**:Openfire提供API接口,允许开发者创建自定义客户端或集成到现有应用中,增强了系统的灵活性和定制性。 总之,Openfire 4.1.4是一个功能强大的即时通讯服务器,适合各种规模的企业使用。通过深入...
2. `sql`:这个文件可能是一个SQL脚本文件,包含了创建数据库表结构、初始化数据或者更新现有结构的命令。用户可能需要在MySQL数据库中运行这些脚本来准备聊天记录的存储环境。 总的来说,这个Openfire聊天记录插件...
5. **数据库集成**:Openfire支持多种数据库管理系统,如MySQL、PostgreSQL、Oracle等,可以根据组织的需求进行选择和配置。 6. **管理界面**:提供直观的Web管理界面,使得管理员能够轻松管理用户、群组、服务器...
4. **兼容性**:作为openfire的插件,messagePlugin.jar确保与openfire服务器的版本兼容,无缝集成到现有系统中,无需更改核心服务代码。 5. **自研验证**:描述中提到插件是作者亲自编写并测试过的,这意味着它...
此外,它支持LDAP集成,便于与企业现有的用户认证系统对接。 **4. 聊天室与群组** Openfire允许创建公共或私有的聊天室,用户可以自由加入或邀请他人参与。群组功能使得消息广播和协作变得更加高效,可以设置群组...
根据提供的标题“文档openfire应用”以及描述中的信息“使用openfire下载应用可以更好地应用于系统中...通过这些步骤,你可以顺利地将Openfire集成到现有的系统环境中,并且利用它的强大功能来提升系统的即时通讯能力。
- **API支持**:Openfire提供了API接口,开发者可以利用这些接口开发自己的客户端应用,或者与现有的业务系统集成。 - **插件生态**:Openfire拥有丰富的插件库,如Adium、Pidgin等第三方客户端都支持与Openfire的...
Openfire还支持与其他XMPP服务器的互操作性,方便整合现有的IM系统。 此外,Openfire提供了丰富的API和插件系统,允许开发人员自定义功能,如监控、审计、集成第三方应用等。确保定期更新Openfire至最新版本,以...
3. **数据库集成**:Openfire支持多种数据库系统,如MySQL、PostgreSQL等。源码中会有与数据库相关的配置文件和JDBC连接代码,用于用户管理、群组管理、聊天记录存储等。 4. **组件架构**:Openfire采用模块化设计...
这款服务器的开发文档是开发者深入理解Openfire、进行定制化开发或集成到现有系统中的重要参考资料。Javadoc是Java编程语言中用于生成API文档的工具,它通过解析源代码注释来生成HTML格式的文档,方便程序员了解类库...
通过插件,Openfire能够轻松集成到现有的企业信息系统中,实现无缝通讯。 此外,Openfire对安全性的重视也值得称赞。它支持SSL/TLS加密,保障了数据传输的安全性,防止信息被窃取或篡改。同时,Openfire还提供了...
10. **API与SDK**:Openfire提供了丰富的API供开发者使用,包括Java API、REST API等,使得开发者能够轻松地与其他系统集成或者开发客户端应用。 总的来说,"openfire_3_9_3.tar.gz"提供了一个强大的即时通讯平台的...
Openfire 还允许你自定义集成,比如与你现有的用户系统整合,确保用户认证的一致性。此外,Openfire 提供的 UserService 接口详细说明可以帮助开发者更好地理解和利用用户管理功能。 至于 Spark,这是一个与 ...
- **集成能力**:它可以轻松集成到现有的企业系统中,如CRM、ERP等,提升协作效率。 安装Openfire时,用户需要考虑的要点包括: - 确保系统满足Java运行环境的要求。 - 配置数据库连接,Openfire支持多种数据库,如...