openfire使用自定义用户表

转自: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.  
  5. 'jdbc:oracle:thin:@10.35.246.178:1521:orcl'); 
  6. insertinto OFPROPERTY (NAME, PROPVALUE) 
  7. values ('jdbcProvider.driver', 'oracle.jdbc.driver.OracleDriver'); 
  8.  
  9. --设置管理员账号 
  10. insertinto OFPROPERTY (NAME, PROPVALUE) 
  11. values ('admin.authorizedJIDs', 'admin@localhost'); 
  12.  
  13. --自定义用户认证 
  14. insertinto OFPROPERTY (NAME, PROPVALUE) 
  15. values ('jdbcAuthProvider.useConnectionProvider', 'true'); 
  16. insertinto OFPROPERTY (NAME, PROPVALUE) 
  17. values ('jdbcAuthProvider.passwordSQL', 'select ''123456'' as pwd from  
  18.  
  19. t_sys_user t where t.code=?'); 
  20. insertinto OFPROPERTY (NAME, PROPVALUE) 
  21. values ('jdbcAuthProvider.passwordType', 'plain'); 
  22.  
  23. --自定义用户管理 
  24. insertinto OFPROPERTY (NAME, PROPVALUE) 
  25. values ('jdbcUserProvider.allUsersSQL', 'select code from t_sys_user  
  26.  
  27. t'); 
  28. insertinto OFPROPERTY (NAME, PROPVALUE) 
  29. values ('jdbcUserProvider.nameField', 'name'); 
  30. insertinto OFPROPERTY (NAME, PROPVALUE) 
  31. values ('jdbcUserProvider.searchSQL', 'select code from t_sys_user t  
  32.  
  33. where code=?'); 
  34. insertinto OFPROPERTY (NAME, PROPVALUE) 
  35. values ('jdbcUserProvider.useConnectionProvider', 'true'); 
  36. insertinto OFPROPERTY (NAME, PROPVALUE) 
  37. values ('jdbcUserProvider.emailField', 'email'); 
  38. insertinto OFPROPERTY (NAME, PROPVALUE) 
  39. values ('jdbcUserProvider.userCountSQL', 'selectcount(*) from  
  40.  
  41. t_sys_user t'); 
  42. insertinto OFPROPERTY (NAME, PROPVALUE) 
  43. values ('jdbcUserProvider.loadUserSQL', 'select t.name,t.email,t.code  
  44.  
  45. from t_sys_user t where t.code=?'); 
  46. insertinto OFPROPERTY (NAME, PROPVALUE) 
  47. values ('jdbcUserProvider.usernameField', 'code'); 
  48.  
  49. --使用不同的数据源 
  50. update OFPROPERTY set  
  51.  
  52. PROPVALUE='org.jivesoftware.openfire.user.JDBCUserProvider' 
  53. whereNAME='provider.user.className'
  54. update OFPROPERTY set  
  55.  
  56. PROPVALUE='org.jivesoftware.openfire.auth.JDBCAuthProvider' 
  57. whereNAME='provider.auth.className'
  58. commit
posted @ 2014-04-16 09:41  foutouren  Views(388)  Comments(0)    收藏  举报