在Openfire中使用自己的数据表之修改配置文件

  目前我使用的Openfire版本是3.10.3,以下使用说明也是在这个版本上做的修改。

  Openfire提供了两种方式使用用户数据表。一种是安装完成之后默认实现的org.jivesoftware.openfire.user.DefaultUserProvider,一种是org.jivesoftware.openfire.user.JDBCUserProvider,同样对于用户验证也提供了默认实现的org.jivesoftware.openfire.auth.DefaultAuthProvider,一种是org.jivesoftware.openfire.auth.JDBCAuthProvider。前者都是基于安装时候填的数据库表上建立用户表的。如果要想使用自己的用户表或者基于现有的用户表,则需要使用后者。

  使用自定义的用户表方法有两种,一种是修改配置文件,一种是登录系统修改系统属性。

  修改配置文件

  打开Openfire的安装目录,找到conf/openfire.xml配置文件,这个是Openfire加载系统属性的文件,加入以下配置即可修改一些系统属性。

  • 增加管理员

  Openfire默认的登录管理员名称是admin,这里可以进行修改。

1 <admin>
2         <authorizedUsernames>joe, jane</authorizedUsernames>
3 </admin>

以上定义有两个用户名为joe和jane的用户可以登录管理控制台。

  •  使用自定义的数据库连接
1 <jdbcProvider>
2     <driver>com.mysql.jdbc.Driver</driver>
3     <connectionString>jdbc:mysql://localhost/dbname?user=username&amp;password=secret</connectionString>
4  </jdbcProvider>
  • 自定义认证集成,openfire中默认使用的是md5加密密码的。
1 <provider>
2     <auth>
3       <className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className>
4     </auth>
5   </provider>
6   <jdbcAuthProvider>
7      <passwordSQL>SELECT password FROM user_account WHERE username=?</passwordSQL>
8      <passwordType>plain</passwordType>
9 </jdbcAuthProvider>

这里需要说明className是不能更改的字符串,passwordSQL是查询数据表的sql语句,passwordType是密码的加密方式,有plain、md5、sha1、sha256、sha512等几种字符串可填入。

  • 用户数据集成,官方说明,如果使用了用户数据集成,那么就必须使用认证集成。示例如下:
 1 <provider>
 2     <auth>
 3       <className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className>
 4     </auth>
 5     <user>
 6       <className>org.jivesoftware.openfire.user.JDBCUserProvider</className>
 7     </user>
 8   </provider>
 9   <jdbcAuthProvider>
10      <passwordSQL>SELECT password FROM user_account WHERE username=?</passwordSQL>
11      <passwordType>plain</passwordType>
12   </jdbcAuthProvider>
13   <jdbcUserProvider>
14      <loadUserSQL>SELECT name,email FROM myUser WHERE username=?</loadUserSQL>
15      <userCountSQL>SELECT COUNT(*) FROM myUser</userCountSQL>
16      <allUsersSQL>SELECT username FROM myUser</allUsersSQL>
17      <searchSQL>SELECT username FROM myUser WHERE</searchSQL>
18      <usernameField>username</usernameField>
19      <nameField>name</nameField>
20      <emailField>email</emailField>
21  </jdbcUserProvider>

  其中,user和auth里面的className是Openfire内置的类名,不能更改。jdbcUserProvider是Openfire提供的一些获取用户数据的方法。因为用到自己定义的表,所以字段和表名可能不同,所以必须自定义sql。需要定义的方法有

  a. loadUserSQL : 根据用户名查询用户信息,包括名称和邮件。语句后有一个“?”,这个问号会被username替换掉。

  b. userCountSQL: 查询用户总数。

  c. searchSQL : 查询用户。where后面没有接入任何字符串,jdbcUserProvider会根据填入查询的用户名或者名称邮件等自动加进去查询。如果没有查询条件将不起作用。

  d. usernameField: 在自定义数据表中username的字段名。用于以上的sql查询。

  e. nameField: 在自定义数据表中name的字段名。用于以上的sql查询。

  f. emailField:在自定义数据表中email的字段名。用户以上的sql查询。

  

  •  分组集成,如果要使用自己的用户分组,那么也需要加入认证集成,这里认证集成就不再写了,仅展示分组集成配置。
1 <provider>
2     <group>
3   <className>org.jivesoftware.openfire.group.JDBCGroupProvider</className>
4     </group>
5 </provider>

  其中group中的className是固定的。

1 <jdbcGroupProvider>
2        <groupCountSQL>SELECT count(*) FROM myGroups</groupCountSQL>
3        <allGroupsSQL>SELECT groupName FROM myGroups</allGroupsSQL>
4        <userGroupsSQL>SELECT groupName FROM myGroupUsers WHERE username=?</userGroupsSQL>
5        <descriptionSQL>SELECT groupDescription FROM myGroups WHERE groupName=?</descriptionSQL>
6        <loadMembersSQL>SELECT username FROM myGroupUsers WHERE groupName=? AND isAdmin='N'</loadMembersSQL>
7        <loadAdminsSQL>SELECT username FROM myGroupUsers WHERE groupName=? AND isAdmin='Y'</loadAdminsSQL>
8 </jdbcGroupProvider>

以上配置简单说明:

  a. groupCountSQL: 查询组个数,

  b. allGroupsSQL: 查询所有的分组。

  c. userGroupsSQL: 根据用户名查询分组。

  d. descriptionSQL: 根据组名查询分组描述。

  e. loadMembersSQL: 根据组名加载分组里面所有的成员。

  f. loadAdminsSQL: 根据组名查询分组里所有的管理员。

 

原文地址:https://www.cnblogs.com/bigbang92/p/Openfire-db_integration.html