`

Openfire集成现有系统数据库用户

 
阅读更多

转自: http://zoeyyoung.gitcafe.com/openfire-xmpp-database.html

 

 

参考文档:

官方文档

Custom Database Integration Guide

——参考该文档介绍需要配置的参数, 在conf/openfire.xml中编辑属性, 实际为在管理控制台或数据库中添加系统属性

背景

假设已存在MySQL数据库office, 且数据库中有3张表users(用户表)groups(分组表)groupusers(用户所属分组表)

目标

使用office数据库中的usersgroupsgroupusers表替代Openfire中的ofuserofgroupofgroupuser三个表, 从而整合现有系统用户

users表包含的属性(对应于Openfire原数据库中的ofuser表):

属性名 说明
uid 用于登录,假如uid为admin,则jid为admin@domain
name 用户名
pwd 密码
email 电子邮件
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的列名     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服务器与现有的用户数据库进行集成。这样的集成...

    OpenFire集成现在系统用户的ofproperty表信息

    这是一个OpenFire集成Oracle数据库来集成现有系统中的用户管理时的ofproperty表信息

    openfire扩展整合现有系统用户

    标题中的“openfire扩展整合现有系统用户”是指在Openfire这款开源即时通讯服务器上,将已有的用户系统(如企业内部的LDAP、AD等)与Openfire进行集成,实现用户身份验证和管理的一体化。Openfire是一款基于Java开发...

    [经典]Openfire整合现有用户

    在企业环境中,通常需要将Openfire与现有的用户管理系统进行整合,以便利用已有的用户数据,如LDAP(轻量级目录访问协议)或数据库中的用户信息。本文将详细介绍如何将Openfire与现有的用户资源进行整合,并扩展其...

    openfire3.9.3 WINDOWS安装包

    9. **API 接口**:对于开发者,Openfire提供了丰富的API,允许开发自定义的应用程序或集成到现有系统中。 10. **社区支持**:作为开源项目,Openfire有一个活跃的社区,用户可以在官方论坛上寻求帮助、报告问题或...

    openfire_4_1_4.tar.gz

    10. **API与开发**:Openfire提供API接口,允许开发者创建自定义客户端或集成到现有应用中,增强了系统的灵活性和定制性。 总之,Openfire 4.1.4是一个功能强大的即时通讯服务器,适合各种规模的企业使用。通过深入...

    openfire 聊天记录插件(单聊群聊)

    2. `sql`:这个文件可能是一个SQL脚本文件,包含了创建数据库表结构、初始化数据或者更新现有结构的命令。用户可能需要在MySQL数据库中运行这些脚本来准备聊天记录的存储环境。 总的来说,这个Openfire聊天记录插件...

    openfire_4_1_5

    5. **数据库集成**:Openfire支持多种数据库管理系统,如MySQL、PostgreSQL、Oracle等,可以根据组织的需求进行选择和配置。 6. **管理界面**:提供直观的Web管理界面,使得管理员能够轻松管理用户、群组、服务器...

    openfire 聊天历史纪录插件1

    4. **兼容性**:作为openfire的插件,messagePlugin.jar确保与openfire服务器的版本兼容,无缝集成到现有系统中,无需更改核心服务代码。 5. **自研验证**:描述中提到插件是作者亲自编写并测试过的,这意味着它...

    openfire3.10.0

    此外,它支持LDAP集成,便于与企业现有的用户认证系统对接。 **4. 聊天室与群组** Openfire允许创建公共或私有的聊天室,用户可以自由加入或邀请他人参与。群组功能使得消息广播和协作变得更加高效,可以设置群组...

    文档openfire应用

    根据提供的标题“文档openfire应用”以及描述中的信息“使用openfire下载应用可以更好地应用于系统中...通过这些步骤,你可以顺利地将Openfire集成到现有的系统环境中,并且利用它的强大功能来提升系统的即时通讯能力。

    Openfire免安装版

    - **API支持**:Openfire提供了API接口,开发者可以利用这些接口开发自己的客户端应用,或者与现有的业务系统集成。 - **插件生态**:Openfire拥有丰富的插件库,如Adium、Pidgin等第三方客户端都支持与Openfire的...

    openfire 安装文件及详细安装教程

    Openfire还支持与其他XMPP服务器的互操作性,方便整合现有的IM系统。 此外,Openfire提供了丰富的API和插件系统,允许开发人员自定义功能,如监控、审计、集成第三方应用等。确保定期更新Openfire至最新版本,以...

    openfire4.2.3源码

    3. **数据库集成**:Openfire支持多种数据库系统,如MySQL、PostgreSQL等。源码中会有与数据库相关的配置文件和JDBC连接代码,用于用户管理、群组管理、聊天记录存储等。 4. **组件架构**:Openfire采用模块化设计...

    openfire详细开发文档

    这款服务器的开发文档是开发者深入理解Openfire、进行定制化开发或集成到现有系统中的重要参考资料。Javadoc是Java编程语言中用于生成API文档的工具,它通过解析源代码注释来生成HTML格式的文档,方便程序员了解类库...

    openfire_4_2_3-x64

    通过插件,Openfire能够轻松集成到现有的企业信息系统中,实现无缝通讯。 此外,Openfire对安全性的重视也值得称赞。它支持SSL/TLS加密,保障了数据传输的安全性,防止信息被窃取或篡改。同时,Openfire还提供了...

    openfire_3_9_3.tar.gz

    10. **API与SDK**:Openfire提供了丰富的API供开发者使用,包括Java API、REST API等,使得开发者能够轻松地与其他系统集成或者开发客户端应用。 总的来说,"openfire_3_9_3.tar.gz"提供了一个强大的即时通讯平台的...

    openfire安装配置部署提供Windows系统和linux系统安装配置以及管理员控制台API接入

    Openfire 还允许你自定义集成,比如与你现有的用户系统整合,确保用户认证的一致性。此外,Openfire 提供的 UserService 接口详细说明可以帮助开发者更好地理解和利用用户管理功能。 至于 Spark,这是一个与 ...

    openfire4.1

    - **集成能力**:它可以轻松集成到现有的企业系统中,如CRM、ERP等,提升协作效率。 安装Openfire时,用户需要考虑的要点包括: - 确保系统满足Java运行环境的要求。 - 配置数据库连接,Openfire支持多种数据库,如...

Global site tag (gtag.js) - Google Analytics