分享

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

 WindySky 2016-03-09
Openfire集成现有系统数据库用户

转自: http://zoeyyoung./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 使用其他数据库的用户 摘抄 http://www.cnblogs.com/hannover/archive/2008/12/12/1353806.html 1、启动ajmessage服务器,然后进入 http://172.16.15.110:9090/server-properties.jsp (系统属性配置) inse

openfire 调整现有数据库

openfire 整合现有数据库 http://blog.csdn.net/heyi1214/article/details/4218199 openfire扩展小试 整合现有系统用户如果我想使用现有系统的用户/组(部门),而不想使用openfire再去管理一套用户/组,用openfire可以非常方便的整合现有系统用户。进入openfire管理控制台-服务器-服务管理器

openfire数据库配备说明

openfire数据库配置说明 数据库配置是在 conf/openfire.xml 配置文件中修改的: 嵌入数据库配置 其他外部数据库(例如:Oracle) 启动配置向导 详见: http://www./opensource/openfire/openfire-config-db/

XMPP 之Openfire的用户数据库调整

XMPP 之Openfire的用户数据库整合 openfire\documentation下的文档有比较详细的信息 如果手动一步步设置 删除默认, 首先停止正常运行的Openfire服务器 默认的库ofProperty的如下记录删除 provider.auth.classname provider.user.classname provider.group.classname 建立一个第三方的

直接操作数据库数据回为Openfire注册新用户

直接操作数据库数据来为Openfire注册新用户 众所周知,Openfire的注册方式一般有三种: 1.带内注册 ---- In-Band Registration. 即客户端通过匿名方式与Openfire 服务器端建立连接并验证,然后发起注册节点XML流,以XMPPStream的方法直接像服务器注册。code4app上有另外一个XMPP的带内注册demo详细的示范了这个方法(不是

openfire数据库形式指南

openfire数据库模式指南 openfire数据库模式指南 导言 This document outlines the data type conventions and tables in the Openfire database schema. Some information, like column indexes and foreign keys, is omitted.该文件

openfire联接外部数据库

openfire连接外部数据库 在conf/openfire.xml中增加: <connectionProvider> <className>org.jivesoftware.database.DefaultConnectionProvider</className> </

openfire(三)数据库浅析

openfire(3)数据库浅析 openfire 中的连接有几种,可以自己实现接口ConnectionProvider,修改openfire.xml中的connectionProvider的属性为自己实现的类。 <connectionProvider> <className>org.jivesoftware.database.Def

【openfire插件开发】数据库处置部分(openfire数据库模式)

【openfire插件开发】数据库处理部分(openfire数据库模式) 我们都知道,openfire的二次开发一般都是以插件形式组织的。openfire已有数据库及数据表。今天我们来讲,我们进行插件开发的时候,如何创建自己的数据表,添加到openfire原有的数据库中。 1.写数据库创建的脚本。 插件src目录下新建database文件夹,目录结构如下所示: 在d

openfire(二)数据库脚本执行

openfire(2)数据库脚本执行 当XMPPServer启动的时候,会调用其start()方法, public void start() { try { 

android 添加好友其间到openfire数据库

android 添加好友之间到openfire数据库 http://hzhlu./blog/1263968

openfire数据库中文乱码有关问题

openfire数据库中文乱码问题 1、首先数据库的编码设置为UTF-8 2、项目的编码也要设置为UTF-8 如果数据保存到数据库的时候还有乱码 就要修改openfire配置文件 在openfire主目录\conf\openfire.xml 修改相关配置 把 <serverURL>jdbc:mysql://local

openfire(四)数据库浅析之序列

openfire(4)数据库浅析之序列 openfire中提供了生产序列的管理器(SequenceManager),其构造函数如下: public SequenceManager(int seqType, int size) { managers.put(seqType, this);

PD逆向工程从幸存数据库生成PDM

PD逆向工程从现有数据库生成PDM(转) 在数据建模过程中,我们建立概念数据模型,通过正向工程生成物理数据模型,生成数据库建库脚本,最后将物理数据模型生成关系数据库,现在反过来,通过逆向工程将关系数据库,生成物理数据模型。 优点: 在丢失数据模型或者数据库模型同现有的数据库不一致,可以通过该方法

幸存服务器oracle数据库调优

现有服务器oracle数据库调优 这段时间,一直在做数据库方面的调优。 其中有一个表,差不多1亿多数据,做了表分区,每天40多万数据增长。分区一个月做一次,相当于一个分区有1200万左右数据。 前台限制查询区间为7天,也就是最多数据为280万,这时,查询走的是分区key创建时间,选择因子差不多为23%。 前台也做了分页,这样,基本上能够保证

解决openfire在使用MySQL数据库后的中文乱码有关问题

解决openfire在使用MySQL数据库后的中文乱码问题 参考:http://blog.csdn.net/vikione/article/details/5996987

解决openfire在使用MySQL数据库后的中文乱码有关问题

解决openfire在使用MySQL数据库后的中文乱码问题(转) openfire是一个非常不错的IM服务器,而且是纯Java实现,具有多个平台的版本,他的数据存储可以采用多种数据库,如MySQL,Oracle等。 在实际使用时大家遇到最多的就是采用MySQL数据库后的中文乱码问题,这个问题十分有趣,而且从现象上可以看出openfire内部的一些机制。 实际问题是这样的:首先启动openfi

openfire连接mysql数据库的字符集有关问题解决

openfire连接mysql数据库的字符集问题解决 openfire默认配置连接mysql数据库后,中文出现乱码。 解决办法: mysql字符集设置为utf8 + 设置全局的字符集 SET @@global.character_set_client = utf8; SET @@global.chara

为何不建议采用数据库写入的方式集成不同系统

为什么不建议采用数据库写入的方式集成不同系统 今天参加一个项目方案沟通会,实施方是一个外部公司,需要我帮忙确定内部系统和本次开发系统的接口需求。实施方提出的方案是直接写入内部系统的数据库,我给出的建议是通过交换一个XML文件实现数据同步。理由有三个: 1.审计跟踪。直接写入数据库,很难记录访问日志,一旦出现问题,很难界定责任。 2.数据完整性。一个单据是否有效,单靠数据库提供的约束机制是很难准确

使用maven-sql-plugin实现继续数据库集成(CDBI)

使用maven-sql-plugin实现持续数据库集成(CDBI) http://juvenshun./blog/207326 数据库持续集成(Continuous Database Integration, CDBI)是持续集成(Continuous Ingeration, CI)不可或缺的重要组成部分。在典型的情况下,版本控制系统管理数据库脚本,包括数据库定义语言(DDL)

应用maven-sql-plugin实现持续数据库集成(CDBI)

使用maven-sql-plugin实现持续数据库集成(CDBI) 数据库持续集成(Continuous Database Integration, CDBI)是持续集成(Continuous Ingeration, CI)不可或缺的重要组成部分。在典型的情况下,版本控制系统管理数据库脚本,包括数据库定义语言(DDL)和数据库操纵语言(DML)。开发成员在开发过程中添加或者修改数据库脚本,在本地

[总结]Java数据库连接 - 集成第三方ORM框架 - iBatis

[小结]Java数据库连接 - 集成第三方ORM框架 - iBatis 9. 集成第三方ORM框架 - iBatis 总体来说 iBATIS 的系统结构还是比较简单的,它主要完成两件事情: <!--[if !supportLists]-->_ <!--[endif]-

shiro 后盾权限认证集成jdbc数据库操作

shiro 后台权限认证集成jdbc数据库操作 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www./schema/beans" xmlns:xsi="http://www./200

用DbUnit开展数据库集成测试

用DbUnit进行数据库集成测试 http://www.cnblogs.com/kirinboy/archive/2012/06/06/integration-testing-with-dbunit.html 现在的DbUnit要求在测试时继承DBTestCase,而不是之前的DatabaseTestCase(前者继承自后者,而后者继承了junit的TestCase)。DatabaseTestC

ArcGIS 10.1 for Server 保险机制(5)数据库集成安全

ArcGIS 10.1 for Server 安全机制(5)数据库集成安全 1 常见用户需求 在发布和使用GIS服务的过程中,经常会遇到如下的一些需求: 1)同一个服务,不同用户访问不同的图层 2)同一个图层,只允许

数据库管理系统的登录名、角色,数据库的用户、角色跟架构

数据库管理系统的登录名、角色,数据库的用户、角色和架构 概述 之前的一篇博客中写到过关于服务器登录名,服务器角色,数据库用户,数据库角色的关系,理论的一些知识,大家可以看看这篇博客:登录名,服务器角色,用户名和数据库角色。本片博客注重操作。 数据库架构 在具体的操作时,先普及一下数据库

Oracle 数据库用户治理

Oracle 数据库用户管理 Oracle 数据库用户管理 Oracle 权限设置 一、权限分类: 系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。 实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。 二、系统权限管理: 1、系统权限

yaf框架兑现数据库读写分离(集成非zendDB)

yaf框架实现数据库读写分离(集成非zendDB) 后台功能同:http://alfred-long./blog/1711486 用了一个外部类库,可以实现数据库读写分离,具体看例子中的配置。

OPFIRE外挂数据库装配

OPFIRE外挂数据库安装 /opt/openfire/bin/openfirectl 开启setup mysql 创建openfire 浏览器访问x.x.x.x:9090 标准数据库连接 jdbc:mysql://127.0.0.1:3306/openfire 关闭setup 1.7JDK rpm -ivh jdk-7u45-linux-

Oracle数据库用户与默许用户

Oracle数据库用户与默认用户 Oracle数据库用户 1.数据库管理员 DBA。每个数据库至少都有一个数据库管理员。 主要职责 安装和升级数据库和其他应用工具 分配系统存储空间 当应用程序开发员设计完成一个应用程序之后,为其创建主要的数据库存储结构,例如表空间。 根据应用程序开发员的设计创建主要的数据库对象,例如表、试图、索引。 根据应用程序开发员提供的信息修改数据库结构。 管理用户,维护系

Oracle数据库增添用户,设置权限,删除用户

Oracle数据库添加用户,设置权限,删除用户 【转载】http://wenwen.soso.com/z/q138910558.htm Oracle数据库添加用户,设置权限,删除用户 20 [ 标签:oracle, 数据库, 用户 ] 范塔西 2009-06-25 11:32 Oracle数据库添加用户,设置权限,删除用户 满意答案 create user username----------

WebApi 插件式构建议案:集成加载数据库连接字符串

WebApi 插件式构建方案:集成加载数据库连接字符串 对服务来说,一般都会用到数据库。而今,在微软的大环境下,使用 EF 的人肯定会越来越多。但是,使用 EF 有个问题,一个是使用缺省的构造函数,缺省从 ConfigurationManager.ConnectionStrings 中获取数据库连接;另外一种就是在构造的时候,手工指定数据库连接字符串。 对开发者来说,最好的办法就是不去管它,直接

用PHP写的MySQL数据库用户认证系统代码

这两天受朋友的托付,要我帮他写一个使用MySQL数据库的用户认证系统。我当然不好推脱的,只得耗费了一晚上的休息时间,写了个很简单的PHP程序。 用户认证的原理很简单:首先需要用户在页面上填入用户名和密码,当然没注册的用户需要先注册。然后调用数据库搜索是否有相应的用户。如果有就确认,没有则提醒用户先注册。使用PHP来完成这一切很简单,但需要注意的是如果想在以后的页面中都能确认用户身份,使

练习题建立用户管理系统以文件做数据库

练习建立用户管理系统以文件做数据库 1.java向文件中写数据 File f = new File("C:/EclipseProjects/txt/username_pwd.txt"); 直接写的话: FileWriter fw = new FileWriter("C:/EclipseProjects/txt/check1.txt"); BufferedW

用户管理跟数据库安全

用户管理和数据库安全 本文是我自己翻译并总结自《Expert Oracle Database 11g Administration》,没写完! 数据库安全同样要依赖于系统和网络安全。 system and object privileges Oracle profiles:let you set limits on the resources used

创造完Oracle数据库,但是用系统用户sys或者sysdba无法登陆sqlplus

创建完Oracle数据库,但是用系统用户sys或者sysdba无法登陆sqlplus 系统用户sys或者sysdba无法登陆sqlplus 运行->cmd,输入sqlplus /nolog 回车。 输入conn /as sysdba 回车。 drop user test cascade;(注意:如果存在test用户,则首先删除该用户的所有信息。) create user test

小结:ibatis对derby数据库操作,以及与spring的集成(ibatis's hello world)

总结:ibatis对derby数据库操作,以及与spring的集成(ibatis's hello world) 转载请注明出处: http://renjie120./ 用过ibatis之后,感觉hibernate太复杂. 使用过derby数据库之后,感觉mysql也很大. helloWorld工程很重要,学习新东西完成helloWorld就心里有底了. 闲来

oracle 数据库创办用户权限

oracle 数据库创建用户权限 1 创建用户 create user zhaozhi3758 identified by 123 2 赋予权限 grant resource,connect,dba to zhaozhi3758 3 删除用户 drop user zhaozhi3758 cascade

修补SQLSERVER数据库用户

修复SQLSERVER数据库用户 SELECT SUSER_SID ('test') --查询sid用户 sp_addlogin 'roiland','test','master' go EXEC sp_grantdbaccess 'test', 'test' go sp_addrolemember 'db_owner','test' go 2005重新安装数据库服

规则引擎集成接口(6)查询分析器和数据库连接配置文件

规则引擎集成接口(六)查询分析器和数据库连接配置文件 查询分析器 弹出窗体“执行sql语句”,在下面编辑sql语句,编辑完后点击执行,结果查看在“执行结果数据”选项卡中,如下图: 生成数据库连接配置文件 右键点击数据库连接文件“hr”—“生成数据库连接配置文件”,如下图: 弹出窗体,将生成的hr.conf文件放在规则引擎安装目录下

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多