openfire使用自定義使用者表

風的王子發表於2013-11-06
在最近的專案中使用openfire伺服器實現訊息推送功能,如果使用openfire自帶的使用者表,需要維護兩張使用者表,不是很方便,如果openfire能夠直接使用現有系統的使用者表就方便多了,而事實上openfire已經為我們考慮到了這一點,我們只需要做一些相關配置就可以了。
  • 原理
研究了下openfire的原始碼,發現實現此點的關鍵在於data provider的應用,簡單來說,就是在程式中需要用到持久化資料(比如使用者名稱、部門名這些,可以儲存在資料庫中,也可以儲存在xml檔案或者ldap目錄服務中)的地方,用一個Provider作為獲取資料的統一介面,針對不同的資料來源(可以是資料庫的不同表,也可以是nosql、xml等其它資料來源)進行相應的實現,比如其中AuthProvider介面(負責使用者驗證),它有兩個不同的實現DefaultAuthProvider和JDBCAuthProvider ,前者是預設的openfire自帶表,而後者則是根據我們自定義的資料表,我們將預設的DefaultAuthProvider配置為JDBCAuthProvider ,並新增一些配置文字,就可以進行資料來源的切換了。
  • 具體配置

進入openfire管理控制檯-伺服器-服務管理器-系統屬性

增加以下鍵值對,或者在資料庫中直接更新資料表

  1. --設定JDBC連線方式  
  2. insert into OFPROPERTY (NAME, PROPVALUE)  
  3. values ('jdbcProvider.connectionString',   
  4.   
  5. 'jdbc:oracle:thin:@10.35.246.178:1521:orcl');  
  6. insert into OFPROPERTY (NAME, PROPVALUE)  
  7. values ('jdbcProvider.driver''oracle.jdbc.driver.OracleDriver');  
  8.   
  9. --設定管理員賬號  
  10. insert into OFPROPERTY (NAME, PROPVALUE)  
  11. values ('admin.authorizedJIDs''admin@localhost');  
  12.   
  13. --自定義使用者認證  
  14. insert into OFPROPERTY (NAME, PROPVALUE)  
  15. values ('jdbcAuthProvider.useConnectionProvider''true');  
  16. insert into OFPROPERTY (NAME, PROPVALUE)  
  17. values ('jdbcAuthProvider.passwordSQL''select ''123456'as pwd from   
  18.   
  19. t_sys_user t where t.code=?');  
  20. insert into OFPROPERTY (NAME, PROPVALUE)  
  21. values ('jdbcAuthProvider.passwordType''plain');  
  22.   
  23. --自定義使用者管理  
  24. insert into OFPROPERTY (NAME, PROPVALUE)  
  25. values ('jdbcUserProvider.allUsersSQL', 'select code from t_sys_user   
  26.   
  27. t');  
  28. insert into OFPROPERTY (NAME, PROPVALUE)  
  29. values ('jdbcUserProvider.nameField''name');  
  30. insert into OFPROPERTY (NAME, PROPVALUE)  
  31. values ('jdbcUserProvider.searchSQL', 'select code from t_sys_user t   
  32.   
  33. where code=?');  
  34. insert into OFPROPERTY (NAME, PROPVALUE)  
  35. values ('jdbcUserProvider.useConnectionProvider''true');  
  36. insert into OFPROPERTY (NAME, PROPVALUE)  
  37. values ('jdbcUserProvider.emailField''email');  
  38. insert into OFPROPERTY (NAME, PROPVALUE)  
  39. values ('jdbcUserProvider.userCountSQL', 'select count(*) from   
  40.   
  41. t_sys_user t');  
  42. insert into 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. insert into OFPROPERTY (NAME, PROPVALUE)  
  47. values ('jdbcUserProvider.usernameField''code');  
  48.   
  49. --使用不同的資料來源  
  50. update OFPROPERTY set   
  51.   
  52. PROPVALUE='org.jivesoftware.openfire.user.JDBCUserProvider'  
  53. where NAME='provider.user.className';  
  54. update OFPROPERTY set   
  55.   
  56. PROPVALUE='org.jivesoftware.openfire.auth.JDBCAuthProvider'  
  57. where NAME='provider.auth.className';  
  58. commit

相關文章