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@127.0.0.1,那么这里的abc就是openfire后台管理的管理员名,并且这个管理员的信息不是在我们原来的openfire指定的数据库里的管理员,而是在待集成系统的的数据库那里名为abc的管理员,当然我们也可以配置SQL来指定管理员从待集成信息的那个表时获取出来。)
可以直接修改openfire数据库中的 OFPROPERTY表
经测试,可以集成现有系统,例子如下:
我的IP为 192.168.1.102 ,使用的是mysql数据库
现有系统库为sns,其中有张user表,字段:id,email,password,name
为了集成,首先:
修改ofproperty表,将修改之后的内容如下(这里1就是管理员的名字)
admin.authorizedJIDs 1@192.168.1.102
jdbcAuthProvider.passwordSQL select password from user where id=?
jdbcAuthProvider.passwordType plain
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语句来集成现有系统的用户表:
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';
分享到:
相关推荐
标题中的“openfire扩展整合现有系统用户”是指在Openfire这款开源即时通讯服务器上,将已有的用户系统(如企业内部的LDAP、AD等)与Openfire进行集成,实现用户身份验证和管理的一体化。Openfire是一款基于Java开发...
在企业环境中,通常需要将Openfire与现有的用户管理系统进行整合,以便利用已有的用户数据,如LDAP(轻量级目录访问协议)或数据库中的用户信息。本文将详细介绍如何将Openfire与现有的用户资源进行整合,并扩展其...
此外,它支持LDAP集成,便于与企业现有的用户认证系统对接。 **4. 聊天室与群组** Openfire允许创建公共或私有的聊天室,用户可以自由加入或邀请他人参与。群组功能使得消息广播和协作变得更加高效,可以设置群组...
Openfire还支持与其他XMPP服务器的互操作性,方便整合现有的IM系统。 此外,Openfire提供了丰富的API和插件系统,允许开发人员自定义功能,如监控、审计、集成第三方应用等。确保定期更新Openfire至最新版本,以...
Openfire 还允许你自定义集成,比如与你现有的用户系统整合,确保用户认证的一致性。此外,Openfire 提供的 UserService 接口详细说明可以帮助开发者更好地理解和利用用户管理功能。 至于 Spark,这是一个与 ...
二次开发可能包括创建新的认证机制、实现自定义数据存储、整合其他系统或服务等。 4. **文件结构**:在解压"openfire_3_9_3.tar.gz"后,你会看到Openfire源代码的目录结构,包括源代码文件、资源文件、构建脚本、...
2. **组织架构同步**:如意通RTP可以与企业现有的OA、ERP、CMS、CRM等系统进行同步,自动更新组织架构信息,确保联系人信息的准确性和时效性。 3. **消息广播**:支持企业内部的信息广播功能,不仅可以发送消息给...
前者很可能是安装或使用插件的指南,详细介绍了如何将Jabber Messenger集成到现有项目中,包括配置步骤、依赖项管理以及可能遇到的问题和解决方法。而后者“132673638843236489”可能是一个JavaScript文件或者JSON...
在整合AndroidPN服务器到现有项目时,需要考虑与项目本身Spring环境的整合,有时候需要修改源代码以适应项目环境。由于AndroidPN服务器对jetty的使用是绑定的,若不使用jetty,也需要对源代码进行改造。开发者在使用...