openfire整合已有用户数据库(在logs里出现问题:

Property 'jdbcProvider.connectionString' as specified in openfire.xml differs from what is stored in the database. Please make property changes in the database instead of openfire.xml.)http://lishao378.blog.sohu.com/146785554.html

 

首先看下测试数据库结构和内容:

mysql> use test;
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)

mysql> select * from user;
+-----+-------+----------------------------------+-----------------+
| uid | uname | upass                            | email           |
+-----+-------+----------------------------------+-----------------+
|   1 | admin | admin                            | admin@localhost |
|   2 | test  | 5c177f35077e9e0a4a5f7cb4dbc96937 | test@localhost  |
+-----+-------+----------------------------------+-----------------+
2 rows in set (0.00 sec)

其中:admin密码是明文,test密码是字符串phpcms经md5加密后的密文。

按照官方在《Custom Database Integration Guide》中给出的示例,结合所建立的测试数据库在conf/openfire.xml中加入了以下代码:
  <provider>
    <auth>
      <className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className>
    </auth>
    <user>
      <className>org.jivesoftware.openfire.user.JDBCUserProvider</className>
    </user>
  </provider>
  <jdbcAuthProvider>
     <passwordSQL>SELECT upass FROM user WHERE uname=?</passwordSQL>
     <passwordType>plain</passwordType>
  </jdbcAuthProvider>
  <jdbcUserProvider>
     <loadUserSQL>SELECT uname,email FROM user WHERE uname=?</loadUserSQL>
     <userCountSQL>SELECT COUNT(*) FROM user</userCountSQL>
     <allUsersSQL>SELECT uname FROM user</allUsersSQL>
     <searchSQL>SELECT uname FROM user WHERE</searchSQL>
     <usernameField>uname</usernameField>
     <nameField>uname</nameField>
     <emailField>email</emailField>
  </jdbcUserProvider>
但事实证明是不正确的。当重启服务端后,logs/warn.log给出了以下出错警告:
2010.03.23 23:39:44 Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended.
2010.03.23 23:39:44 Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended.
2010.03.23 23:42:41 Property 'provider.auth.className' as specified in openfire.xml differs from what is stored in the database.  Please make property changes in the database instead of openfire.xml.
2010.03.23 23:42:41 Property 'provider.user.className' as specified in openfire.xml differs from what is stored in the database.  Please make property changes in the database instead of openfire.xml.
可见,官方所说通过修改openfire.xml这个配置文件进行整合是不正确的。

经测试,在mysql中执行以下代码,可以有效进行集成:
;//-----------------------------------------------------------------------------------------------------------
UPDATE `openfire`.`ofProperty` SET propValue='org.jivesoftware.openfire.user.JDBCUserProvider' WHERE name='provider.user.className';
UPDATE `openfire`.`ofProperty` SET propValue='org.jivesoftware.openfire.auth.JDBCAuthProvider' WHERE name='provider.auth.className';
INSERT INTO `openfire`.`ofProperty` VALUES  ('jdbcProvider.driver','com.mysql.jdbc.Driver'),
('jdbcProvider.connectionString','jdbc:mysql://localhost:3306/test?user=admin&password=admin'),
('admin.authorizedJIDs','admin@localhost,test@localhost'),
('jdbcAuthProvider.passwordSQL','SELECT upass FROM user WHERE uname=?'),
('jdbcAuthProvider.passwordType','plain'),
('jdbcUserProvider.loadUserSQL','SELECT uname,email FROM user WHERE uname=?'),
('jdbcUserProvider.userCountSQL','SELECT COUNT(*) FROM user'),
('jdbcUserProvider.allUsersSQL','SELECT uname FROM user'),
('jdbcUserProvider.searchSQL','SELECT uname FROM user WHERE'),
('jdbcUserProvider.usernameField','uname'),
('jdbcUserProvider.nameField','uname'),
('jdbcUserProvider.emailField','email');
;//-----------------------------------------------------------------------------------------------------------
若要继续整合用户组等信息,可以参考《Custom Database Integration Guide》,把相关属性添加到ofProperty数据表中。

posted @ 2013-05-22 17:37  IamThat  阅读(1065)  评论(0编辑  收藏  举报