openfire整合现有系统用户

链接:http://blog.csdn.net/unicorn_520/article/details/7700018

openfire服务器配置,先跳过介绍,我想在文章里用到的时候再插入一些介绍。

openfire扩展小试 整合现有系统用户

如果我想使用现有系统的用户/组(部门),而不想使用openfire再去管理一套用户/组,用openfire可以非常方便的整合现有系统用户。

注意:在集成成功后,使用的用户就是你集成系统的数据库,而不是你原来在openfire里配置的数据库了,原来的openfire数据库依然有用,只是用户表ofuser不不能用了,因为如果能用,那么用户账号就可能重复,因为不能两套用户表。

进入openfire管理控制台-服务器-服务管理器-系统属性

可以发现如下配置

provider.auth.className

org.jivesoftware.openfire.auth.DefaultAuthProvider

*用户验证

provider.group.className

org.jivesoftware.openfire.group.DefaultGroupProvider

*获取组相关数据

provider.user.className

org.jivesoftware.openfire.user.DefaultUserProvider

*获取用户相关数据

这些Provider是openfire默认自己管理用户组

但同时openfire还提供了支持JDBC相关的Provider,可以从其它的数据源获取用户/组数据

将上面三个属性分别修改为

org.jivesoftware.openfire.auth.JDBCAuthProvider

org.jivesoftware.openfire.group.JDBCGroupProvider

org.jivesoftware.openfire.user.JDBCUserProvider

然后,需要配置一下数据源,添加如下属性

jdbcProvider.driver

*数据源驱动

jdbcProvider.connectionString

*连接字符串

对每一个JDBC Provider需要配置相关的SQL语句和属性(在系统属性里添加项目)

JDBCAuthProvider

jdbcAuthProvider.passwordSQL

*获取用户密码的SQL

*输入参数:登录名

*输入列:密码

*例:SELECT pwd FROM user WHERE name=?

jdbcAuthProvider.passwordType

*密码类型可以是:plain(文本),md5,sha1

*如果你的密码加密不为以上三种 就需要自己提供一个AuthProvider,在下一章会专门介绍

JDBCGroupProvider

jdbcGroupProvider.allGroupsSQL

*获取所有组的SQL

*输入参数:无

*输出列:组的KEY

*例:SELECT sn FROM department

jdbcGroupProvider.descriptionSQL

*获取组的名称(描述)

*输入参数:组记录的KEY

*输出列:组的名称(描述)

*例:SELECT name FROM department where sn=?

jdbcGroupProvider.groupCountSQL

*获取组的数量

*输入参数:组的KEY

*输出列:组的数量

*例:SELECT count(sn) FROM department

jdbcGroupProvider.loadAdminsSQL

*获取组的管理员

*输入参数:组记录的KEY

*输出列:组管理员的KEY

*例:SELECT admin FROM department where sn=?

jdbcGroupProvider.loadMembersSQL

*获取组的成员

*输入参数:组的KEY

*输出列:组成员的KEY(集合)

*例:SELECT usersn FROM department_user where departmentsn=?

jdbcGroupProvider.userGroupsSQL

*获取成员的组

*输入参数:成员的KEY

*输出列:成员所性组的KEY

*例:SELECT departmentsn FROM department_user where usersn=?

JDBCUserProvider

jdbcUserProvider.allUsersSQL

*获取所有用户

*输入参数:无

*输出列:用户的KEY

*例:SELECT sn from user

jdbcUserProvider.userCountSQL

*获取所有用户数量

*输入参数:无

*输出列:用户数量

*例:SELECT count(sn) from user

jdbcUserProvider.loadUserSQL

*获取用户信息

*输入参数:用户的KEY

*输出列:登录名,名称,email(至少应该这三列,下面要用到)

*例:SELECT loginname,name,email from user where sn =?

jdbcUserProvider.emailField

*指定用户email的列名如:email

jdbcUserProvider.nameField

*指定用户名称的列名如:name

jdbcUserProvider.usernameField

*指定用户登录名的列名如:loginname

最后 还需要配置新的管理员用户

admin.authorizedJIDs

*指定新数据源中的管理员用户注意是是完整JID(user@域名)

*例:admin@server.cn

配置好如上属性 重启openfire

使用admin.authorizedJIDs中的用户名登录openfire管理控制台

如果配置成功,进入openfire管理控制台-用户/组

就可以看到你数据源中的用户/组信息了

同时可以使用spark登录进行测试

此外,如果在调试过程中出现问题 无法登录openfire管理控制台

(这里需要注注意的是在属性amdin.authorizedJIDs的值如设置成,那么这里的abc就是openfire后台管理的管理员名,并且这个管理员的信息不是在我们原来的openfire指定的数据库里的管理员,而是在待集成系统的的数据库那里名为abc的管理员,当然我们也可以配置SQL来指定管理员从待集成信息的那个表时获取出来。)

可以直接修改openfire数据库中的 OFPROPERTY表

经测试,可以集成现有系统,例子如下:

我的IP为 192.168.1.102 ,使用的是mysql数据库

现有系统库为sns,其中有张user表,字段:id,email,password,name

为了集成,首先:

修改ofproperty表,将修改之后的内容如下(这里boy就是管理员的名字)

admin.authorizedJIDsboy@192.168.1.102

jdbcAuthProvider.passwordSQL       select password from user where id=?

jdbcAuthProvider.passwordType      plain //加密方式 还有其他的机密方式

"plain" (the password is stored as plain text)

"md5" (the password is stored as a hex-encoded MD5 hash)

"sha1" (the password is stored as a hex-encoded SHA-1 hash)

"sha256" (the password is stored as a hex-encoded SHA-256 hash)

"sha512" (the password is stored as a hex-encoded SHA-512 hash)

jdbcProvider.connectionString      jdbc:mysql://localhost:3306/sns?user=root&password=123456

jdbcProvider.driver                com.mysql.jdbc.Driver

jdbcUserProvider.allUsersSQL       select id from user

jdbcUserProvider.emailField        email

jdbcUserProvider.loadUserSQL       select name,email from user where id=?

jdbcUserProvider.nameField         name

jdbcUserProvider.userCountSQL      select count(*) from user

jdbcUserProvider.usernameField     name

passwordKey                        f46L75p2QsuKCQy //加密串

provider.admin.className           org.jivesoftware.openfire.admin.DefaultAdminProvider

provider.auth.className            org.jivesoftware.openfire.auth.JDBCAuthProvider

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.JDBCUserProvider

provider.vcard.className           org.jivesoftware.openfire.vcard.DefaultVCardProvider

update.lastCheck                   1262616901497

xmpp.auth.anonymous                true

xmpp.domain                        192.168.1.102

xmpp.session.conflict-limit        0

xmpp.socket.ssl.active             true

注:红色为修改的内容

重启openfire服务器即可.

以后登陆需要输入id,password.有人会问了,为什么用id而不用email呢?

这是因为email中带有符号,而在openfire中会用于记录服务器的域名。所以会有冲突。

况且,openfire作为IM集成到现有系统中时,走的登陆是隐式登陆,即嵌入到原有系统的登陆方式中。

对用户而言透明。

问题:

但是,需要解决的问题在客户端显示时,现有spark是显示的id,jwchat估计也是,需要修改一下,使其对用户而言只显示用户名!如果能够解决,那么对于现有系统而言,基本无任何改动。

现有系统库为myim,其中有张user表,字段:id,email,password,name,与上面不同的是id这里我设它不自动自增,name

即作用户显示名也作账号登陆使用(实际使用中要分开,这里只作个小测试),password为用户登陆密码。可以在openfire数据库时执行如下SQL语句来集成现有系统的用户表:

Sql代码

insert  into ofproperty(name,propValue)values

('jdbcProvider.driver','com.mysql.jdbc.Driver'),

('jdbcProvider.connectionString','jdbc:mysql://localhost/myim?

user=root&password=&useUnicode=true&characterEncoding=utf8'),

('admin.authorizedJIDs','admin@127.0.0.1'),

('jdbcAuthProvider.passwordSQL','SELECT password FROM user WHERE name=?'),

('jdbcAuthProvider.passwordType','plain'),

('jdbcUserProvider.loadUserSQL','SELECT name,email FROM user WHERE name=?'),

('jdbcUserProvider.userCountSQL','SELECT COUNT(*) FROM user'),

('jdbcUserProvider.allUsersSQL','SELECT name FROM user'),

('jdbcUserProvider.usernameField','name'),

('jdbcUserProvider.nameField','name'),

('jdbcUserProvider.emailField','email');

UPDATE ofProperty SET propValue='org.jivesoftware.openfire.user.JDBCUserProvider' WHERE

name='provider.user.className';

UPDATE ofProperty SET propValue='org.jivesoftware.openfire.auth.JDBCAuthProvider' WHERE

name='provider.auth.className';

在of的自带的documentation/db-integration-guide.html 可以查看英文版的

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 姓名:于川皓 学号:16140210089 转载自:https://baike.baidu.com/item/sq...
    道无涯_cc76阅读 1,934评论 0 2
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • 这是个落后和贫穷的国家。 我们所拥有的幸运,我希望那里的人也应该拥有。 走出机场,外面的一片光景似乎不是一个首都应...
    大梨子_1034阅读 166评论 0 0
  • 今天早上上班,路过常走的美食小巷。看到个婆婆,提了满满三大包的金银元宝。这才意识到,原来今天是中元节了呀。 道教的...
    也望春山阅读 122评论 0 0