博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
openfire集成已有数据库
阅读量:7224 次
发布时间:2019-06-29

本文共 2394 字,大约阅读时间需要 7 分钟。

hot3.png

0问题场景

    假如我们有一个网站并且已经有了上百万的注册用户,现在要集成一个IM即时聊天功能,假如我们使用开源的xmpp服务器,都会自动生成默认的数据库以及表结构,用已有数据库的用户表去初始化IM服务器的用户表,不仅麻烦而且涉及到同步问题。所以xmpp服务器都提供了集成数据库的功能。我们可以通过配置修改,把登录认证,用户查询,用户分组等信息,从IM服务器的默认数据库剥离出来。tigase目前只支持mysql,pgsql,derby三种数据库集成,openfire支持的比较多。本文讲的是openfire集成oracle。

1官方文档

官方文档:

2问题解决

问题一:

    
com.mysql.jdbc.Driver
    
jdbc:mysql://localhost/dbname?user=username&password=secret
  

文档中只提供了mysql的外接数据库连接方式,如果是oracle的数据库就要注意了,按照上面的那种拼接时错误的

Oracle的connectionString的字符串应该是 jdbc:oracle:thin:username/password@ip:1521:dbname

driver:oracle.jdbc.driver.OracleDriver 还有需要把oracle连接的jar放在lib目录下  比如ojdbc14.jar(用于oracle9)

问题二:

    
      
org.jivesoftware.openfire.auth.JDBCAuthProvider
    
    
      
org.jivesoftware.openfire.user.JDBCUserProvider
    
  
  
     
SELECT password FROM user_account WHERE username=?
     
plain
  
  
     
SELECT name,email FROM myUser WHERE username=?
     
SELECT COUNT(*) FROM myUser
     
SELECT username FROM myUser
     
SELECT username FROM myUser WHERE
     
username
     
name
     
email
  

第一次配置时,只配置了auth认证,以及auth查询的sql(<auth><jdbcAuthProvider>)

结果一直登录不上   后来才知道auth认证和user查询必须同时修改

文档中有写If you enable user integration you must also enable authentication integration (see above).

如果使用user的集成,必须使用auth认证,可是没说auth认证必须也要配置user查询

问题三:

 conf/openfire.xml 下的配置,其实是在admin管理页的系统属性中也可以配置

最后作用于默认数据库的opproperty表

在xml中修改了auth.JDBCAuthProvider和 user.JDBCUserProvider  但是重启后没有起作用

在系统属性中还是DefaultAuthProvider和DefaultUserProvider 需要在系统属性页再进行修改

参考博文:

000645_2Jke_140593.jpg

问题四:

 
        ...        
joe, jane
      

 文档中For example, to let the usersnames "joe" and "jane" login to the admin console:

 这里其实是配置了两个管理员username,这两个账号必须在本地数据库的user表中存在

问题五:

group配置成功后,可以在后台 用户/组 查询中看见组,但是具体某个组的详情页却无法打开

同时客户端用户登录后也无法查看到对应组的信息

通过查询比对后发现,组比如开启共享属性,用户才能再客户端查看

集成的用户组,默认不是共享的,所以无法看到,这里应该是openfire的一个bug

需要ofgroupprop表 添加组的共享信息 

010316_IlRG_140593.jpg

比如集成数据库有个分组 叫做公司,显示在客户端,用户的分组名称同事

并且只有组内的成员才能看见组  只有这三条记录存在 集成数据库的组信息 才能看到

3总结

按照配置,用户认证,用户信息,用户分组可以通过配置的数据库连接和查询sql,使用已有的数据库信息

IM的相关逻辑和程序都不用发生变化,这也正好满足我们的项目需要  但是openfire的性能可能有点问题

所以在实际应用中,要综合考虑,选择适用的一个xmpp服务器

转载于:https://my.oschina.net/lujianing/blog/225835

你可能感兴趣的文章
==与equal的区别 这次我理解了,你呢?
查看>>
利用searchview搜索应用程序
查看>>
真正的换位思考:我做测试人员的一天
查看>>
CIH病毒破坏及其修复工具与方法
查看>>
Erlang学习:尾递归
查看>>
MySQL 主从双向复制实验
查看>>
javawb学习01
查看>>
InnoDB与Myisam的六大区别
查看>>
我的友情链接
查看>>
构建Maven项目时常见错误
查看>>
限制root账户不能使用密码只能使用密钥远程登陆或直接不允许远程登录
查看>>
Linux服务器是否已经被***?
查看>>
Django学习(一)---Django的安装
查看>>
如何进行软件架构设计?
查看>>
Nginx的配置介绍
查看>>
eAccelerator 配置参数详解
查看>>
其实你不懂wget的心-01
查看>>
线程注入ThreadInject(dll)
查看>>
比较器的使用
查看>>
在VMWare Workstation 8.0.1中安装苹果MAC OS X Lion Part 3
查看>>