转自:http://blog.csdn.net/nomousewch/article/details/7546083

在最近的项目中使用openfire服务器实现消息推送功能,如果使用openfire自带的用户表,需要维护两张用户表,不是很方便,如果openfire能够直接使用现有系统的用户表就方便多了,而事实上openfire已经为我们考虑到了这一点,我们只需要做一些相关配置就可以了。

  • 原理
研究了下openfire的源码,发现实现此点的关键在于data provider的应用,简单来说,就是在程序中需要用到持久化数据(比如用户名、部门名这些,可以储存在数据库中,也可以储存在xml文件或者ldap目录服务中)的地方,用一个Provider作为获取数据的统一接口,针对不同的数据源(可以是数据库的不同表,也可以是nosql、xml等其它数据源)进行相应的实现,比如其中AuthProvider接口(负责用户验证),它有两个不同的实现DefaultAuthProvider和JDBCAuthProvider ,前者是默认的openfire自带表,而后者则是根据我们自定义的数据表,我们将默认的DefaultAuthProvider配置为JDBCAuthProvider ,并添加一些配置文本,就可以进行数据源的切换了。
  • 具体配置

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

增加以下键值对,或者在数据库中直接更新数据表

  1. --设置JDBC连接方式
  2. insertinto OFPROPERTY (NAME, PROPVALUE)
  3. values ('jdbcProvider.connectionString',
  4. 'jdbc:oracle:thin:@10.35.246.178:1521:orcl');
  5. insertinto OFPROPERTY (NAME, PROPVALUE)
  6. values ('jdbcProvider.driver', 'oracle.jdbc.driver.OracleDriver');
  7. --设置管理员账号
  8. insertinto OFPROPERTY (NAME, PROPVALUE)
  9. values ('admin.authorizedJIDs', 'admin@localhost');
  10. --自定义用户认证
  11. insertinto OFPROPERTY (NAME, PROPVALUE)
  12. values ('jdbcAuthProvider.useConnectionProvider', 'true');
  13. insertinto OFPROPERTY (NAME, PROPVALUE)
  14. values ('jdbcAuthProvider.passwordSQL', 'select ''123456'' as pwd from
  15. t_sys_user t where t.code=?');
  16. insertinto OFPROPERTY (NAME, PROPVALUE)
  17. values ('jdbcAuthProvider.passwordType', 'plain');
  18. --自定义用户管理
  19. insertinto OFPROPERTY (NAME, PROPVALUE)
  20. values ('jdbcUserProvider.allUsersSQL', 'select code from t_sys_user
  21. t');
  22. insertinto OFPROPERTY (NAME, PROPVALUE)
  23. values ('jdbcUserProvider.nameField', 'name');
  24. insertinto OFPROPERTY (NAME, PROPVALUE)
  25. values ('jdbcUserProvider.searchSQL', 'select code from t_sys_user t
  26. where code=?');
  27. insertinto OFPROPERTY (NAME, PROPVALUE)
  28. values ('jdbcUserProvider.useConnectionProvider', 'true');
  29. insertinto OFPROPERTY (NAME, PROPVALUE)
  30. values ('jdbcUserProvider.emailField', 'email');
  31. insertinto OFPROPERTY (NAME, PROPVALUE)
  32. values ('jdbcUserProvider.userCountSQL', 'selectcount(*) from
  33. t_sys_user t');
  34. insertinto OFPROPERTY (NAME, PROPVALUE)
  35. values ('jdbcUserProvider.loadUserSQL', 'select t.name,t.email,t.code
  36. from t_sys_user t where t.code=?');
  37. insertinto OFPROPERTY (NAME, PROPVALUE)
  38. values ('jdbcUserProvider.usernameField', 'code');
  39. --使用不同的数据源
  40. update OFPROPERTY set
  41. PROPVALUE='org.jivesoftware.openfire.user.JDBCUserProvider'
  42. whereNAME='provider.user.className';
  43. update OFPROPERTY set
  44. PROPVALUE='org.jivesoftware.openfire.auth.JDBCAuthProvider'
  45. whereNAME='provider.auth.className';
  46. commit;

openfire使用自定义用户表的更多相关文章

  1. 第四百零六节,自定义用户表类来继承Django的用户表类,

    第四百零六节,自定义用户表类来继承Django的用户表类, models.py from django.db import models # Create your models here. from ...

  2. django自定义用户表

    django中已经给我生成默认的User表,其中的字段已经可以满足我们的日常需求. 但有时候,我们需要更多的字段,我们就可以自定义.来替换django自带的User表. #models.py from ...

  3. django 自定义用户表替换系统默认表

    首先新建一个users应用,编写这个应用的models类. from django.contrib.auth.models import AbstractUser class UserProfile( ...

  4. Django自定义用户认证

    自定义一个用户认证 详细参考官方文档: https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#django.contrib.au ...

  5. spring security方法一 自定义数据库表结构

    Spring Security默认提供的表结构太过简单了,其实就算默认提供的表结构很复杂,也无法满足所有企业内部对用户信息和权限信息管理的要求.基本上每个企业内部都有一套自己的用户信息管理结构,同时也 ...

  6. 把sql server 2000的用户表的所有者改成dbo

    怎么样把sql server 2000的用户表的所有者,改成dbo,而不是用户名. 推荐使用下面介绍的第二种方法,执行以下查询便可以了.sp_configure 'allow updates','1' ...

  7. 如何利用WordPress创建自定义注册表单插件

    来源:http://www.ido321.com/1031.html 原文:Creating a Custom WordPress Registration Form Plugin 译文:创建一个定制 ...

  8. Sqlserver如何递归查询层级数据将父级字段和本级某个字段合并?如何自定义用户函数并调用?

    开门见山,首先说下遇到的问题:前期系统地区字典表中,每个省市县只存了本级名称,没存完整的字段.如:肥西县隶属安徽省合肥市,表中就存了一个肥西县.现有需求需要将完整字段显示,由于系统已在线上运营,无法做 ...

  9. CMDB资产管理系统开发【day25】:Django 自定义用户认证

    官方文档:https://docs.djangoproject.com/en/1.10/topics/auth/customizing/#substituting-a-custom-user-mode ...

随机推荐

  1. 【XLL 框架库函数】 TempErr/TempErr12

    创建一个包含了 Excel 工作表错误的临时 XLOPER/XLOPER12 原型 LPXLOPER TempErr(WORD err); LPXLOPER12 TempErr12(BOOL err) ...

  2. 使用Fiddler搭建手机调试环境(我做得项目是调试微信的公众号)

    部分内容参考:http://ju.outofmemory.cn/entry/22854 我们在测试微信企业号的时候,由于微信的限制,不能把它拿到chrome浏览器中进行调试,所以就不能实时的看到页面变 ...

  3. 解决java.lang.InstantiationError: sun.net.ftp.FtpClient

    换用jdk1.6 .如果是放容器里的,也把容器的jdk换成1.6

  4. 查看cpu的信息cat /proc/cpuinfo

    cat /proc/cpuinfo processor : vendor_id : GenuineIntel cpu family : model : model name : Intel(R) Co ...

  5. POJ 1743 Musical Theme 二分+后缀数组

    Musical Theme   Description A musical melody is represented as a sequence of N (1<=N<=20000)no ...

  6. tftp服务器的搭建

    基于 红帽6的tftp搭建,当然其他系统搭建方法也大致一样 #mount /dev/cdrom /mnt/           挂载安装光盘  不同光盘挂载用 fdisk -l  查看光盘 #rpm ...

  7. 坐标系统与投影变换及在ARCGIS中的应用

      首先提几个问题:是否有遇到坐标转换的问题?又是否有遇到投影转换的问题?坐标转换与投影转换有什么区别?下面看几个概念:1.地球椭球体( Ellipsoid,Spheroid)2.大地基准面( Geo ...

  8. python 线程之 数据同步 Queue

    Queue:将数据从一个线程发往另外一个线程比较通用的方式是使用queue模块的Queue类 1, 首先创建一个Queue模块的对象,创建Queue对象可以传递maxsize也可以不传递 2. 使用对 ...

  9. db2无法force掉备份连接的处理办法

    在数据库在线备份的时候会与Load和ALTER TABLE <表名> ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE发生冲突导致这两种操作被挂 ...

  10. Qt里的slot

    昨天出了一个小bug, 一直调都没调出来, 今天仔细看了下, 发现出错的原因了. 我在用osgEarth的时候, 用到一个类MapCatalogWidget, 觉得它不够用, 就把这个类给改了下, 添 ...