首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

Openfire集成幸存系统数据库用户

2013-07-16 
Openfire集成现有系统数据库用户转自:?http://zoeyyoung.gitcafe.com/openfire-xmpp-database.html??参考

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@domainname用户名pwd密码email电子邮件
CREATE TABLE `` `` 64NOT NULL`` 32DEFAULT NULL`` 100DEFAULT NULL`` 100DEFAULT NULLPRIMARY KEY ``=DEFAULT =属性名说明groupName组名description描述
CREATE TABLE `` `` 50NOT NULL`` 255DEFAULT NULLPRIMARY KEY ``=DEFAULT =属性名说明groupName对应于groups表的groupNameuid对应于user表的uidadmin是否是管理员, 1是, 0否
CREATE TABLE `` `` 50NOT NULL`` 100NOT NULL`admin` 4NOT NULLPRIMARY KEY `````admin`=DEFAULT =属性名说明属性值httpbind.enabled?truepasswordKey?hiddenprovider.admin.className?org.jivesoftware.openfire.admin.DefaultAdminProviderprovider.auth.className验证org.jivesoftware.openfire.auth.DefaultAuthProviderprovider.group.className组相关org.jivesoftware.openfire.group.DefaultGroupProviderprovider.lockout.className?org.jivesoftware.openfire.lockout.DefaultLockOutProviderprovider.securityAudit.className用户相关org.jivesoftware.openfire.security.DefaultSecurityAuditProviderprovider.user.className?org.jivesoftware.openfire.user.DefaultUserProviderprovider.vcard.className?org.jivesoftware.openfire.vcard.DefaultVCardProviderupdate.lastCheck?1351559310961xmpp.auth.anonymous?truexmpp.domain域名,服务器IP192.168.0.46xmpp.httpbind.scriptSyntax.enabled?truexmpp.session.conflict-limit?0xmpp.socket.ssl.active?true

首先修改三个属性(openfire提供了支持JDBC相关的Provider, 可以从其它的数据源获取用户/组数据):

属性名属性值provider.auth.classNameorg.jivesoftware.openfire.auth.JDBCAuthProviderprovider.group.classNameorg.jivesoftware.openfire.group.JDBCGroupProviderprovider.user.classNameorg.jivesoftware.openfire.user.JDBCUserProvider

接着配置数据源(添加系统属性, 这里使用的是mysql数据库):

属性名说明属性值jdbcProvider.driver数据源驱动com.mysql.jdbc.DriverjdbcProvider.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获取所有用户?用户的uidselect?uid?from?usersjdbcUserProvider.loadUserSQL获取用户信息用户uid用户名,emailselect?name,email?from?users?where?uid=?jdbcUserProvider.userCountSQL获取用户数量?用户数量select count(*) from?usersjdbcUserProvider.searchSQL!!这边略有疑问!!??select?uid?from?users?wherejdbcUserProvider.usernameField指定用户登录名的列名??uidjdbcUserProvider.nameField指定用户名称的列名??namejdbcUserProvider.emailField指定用户email的列名??email

JDBCGroupProvider属性名说明输入值输出列属性值jdbcGroupProvider.allGroupsSQL获取所有组的SQL?组名select?groupName?from?groupsjdbcGroupProvider.descriptionSQL获取组描述组名组描述select?description?from?groups?where?groupName=?jdbcGroupProvider.groupCountSQL获取组的数量?组的数量select count(*) from?groupsjdbcGroupProvider.loadAdminsSQL获取组的管理员组名组管理员select?uid?from?groupusers?where?groupName=? andadmin=1jdbcGroupProvider.loadMembersSQL获取组的成员组名组成员uidselect?uid?from?groupusers?where?groupName=? andadmin=0jdbcGroupProvider.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 ```` SET ='org.jivesoftware.openfire.auth.JDBCAuthProvider' WHERE ='provider.auth.className'UPDATE ```` SET ='org.jivesoftware.openfire.group.JDBCGroupProvider' WHERE ='provider.group.className'UPDATE ```` SET ='org.jivesoftware.openfire.user.JDBCUserProvider' WHERE ='provider.user.className'INSERT INTO ```` 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=?'//-----------------------------------------------------------------------

?

热点排行