openfire开发笔记四-整合现有系统用户表

4 篇文章 0 订阅
4 篇文章 0 订阅

      在开发中,公司已有成熟的组织机构用户管理系统,且在客户端将新增一个组织机构功能,因此必须要使用公司的组织机构用户管理系统里的用户信息。

以下为最终上线版本客户端界面:


使用 openfire可以非常方便的整合现有系统用户。


首先:进入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管理控制台-用户/组
就可以看到你数据源中的用户/组信息了 。
同时可以使用客户端登录进行测试。

 

现在openfire已经使用了外部用户认证。那么如何进行用户的密码修改呢?

需要设置以下两个属性:

//外部用户表修改用户密码sql预计

jdbcAuthProvider.setPasswordSQL=update org_person set LOGIN_PWD=? where  lower(PERSON_CODE)=?

//允许更新操作

jdbcAuthProvider.allowUpdate=true

设置了这两个属性后,密码修改还是不成功,什么原因呢?我查看了源代码(3.6.4版本),发现在

org.jivesoftware.openfire.auth.JDBCAuthProvider类中的setPasswordValue 方法有错误,将

 pstmt.setString(1, username);

pstmt.setString(2, password);

分别改为

 pstmt.setString(2, username);

pstmt.setString(1,password);

问题解决,密码修改成功。

最新版该问题不知道是否解决。

 


特别要注意的是,如果在调试过程中出现问题 无法登录openfire管理控制台
可以直接修改openfire数据库中的 OFPROPERTY表 ,恢复使用原有的用户认证。

 

 

最终配置信息:

 

下一章,我们将讨论如何实现群组信息的发送。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值