openfire 使用已有的数据库作为用户认证数据库 Custom Database Integration Guide「建议收藏」

openfire 使用已有的数据库作为用户认证数据库 Custom Database Integration Guide

大家好,又见面了,我是全栈君。

http://download.igniterealtime.org/openfire/docs/latest/documentation/db-integration-guide.html

 

Introduction

This document provides instructions for integrating Openfire authentication, users, and groups with your custom database tables. This is useful when your users already have accounts in an external system and you do not wish to duplicate those accounts in Openfire. If your user information is available via an LDAP directory rather than custom database tables, see the LDAP guide.

Simple integration with a custom database lets users authenticate using their existing username and password. Optionally, you can configure Openfire to load user profile and group information from your custom database. Any group in Openfire can be designated as a shared group, which means that you can pre-populate user’s rosters using groups.

Background

The integration requires that you enter customized database queries to access your database. You’ll need to be familiar with your database table structure and simple SQL. Your custom database can be a different database on a different server from the Openfire database — you’ll enter database connection information as part of the configuration.

Configuration

In order to configure your server to integrate with your custom database tables:

  1. Stop Openfire.
  2. Edit conf/openfire.xml in your Openfire installation folder as described below using your favorite editor.
  3. Restart Openfire.

Database Connection Settings

You must specify the connection string for your database as well as the JDBC driver.

  • jdbcProvider.driver — the class name of the JDBC driver used to connect to your custom database. The driver must also be in the Openfire classpath (for example, by placing it into the “lib/” directory of your Openfire installation. See the database guide for common driver names for major databases.
  • jdbcProvider.connectionString — the full connection string for the database. Please consult your database driver documentation for syntax. Warning: it’s common for connection string to contain “&” characters. That character has special meaning in XML, so you should escape it using “&”.

Below is a sample config file section (note: the “…” sections in the examples indicate areas where the rest of the config file would exist):

<jive>
  ...
  <jdbcProvider>
    <driver>com.mysql.jdbc.Driver</driver>
    <connectionString>jdbc:mysql://localhost/dbname?user=username&amp;password=secret</connectionString>
  </jdbcProvider>
  ...
</jive>

Authentication Integration

The simplest possible integration with a custom external database is authentication integration. Use the following settings to enable authentication integration.

  • provider.auth.className — set the value to org.jivesoftware.openfire.auth.JDBCAuthProvider.
  • jdbcAuthProvider.passwordSQL — the SQL String to select a user’s password. The SQL statement should contain a single “?” character, which will be dynamically replaced with a username when being executed.
  • jdbcAuthProvider.passwordType — the type of the password. Valid values are
    • “plain” (the password is stored as plain text)
    • “md5” (the password is stored as a hex-encoded MD5 hash)
    • “sha1” (the password is stored as a hex-encoded SHA-1 hash)
    • “sha256” (the password is stored as a hex-encoded SHA-256 hash)
    • “sha512” (the password is stored as a hex-encoded SHA-512 hash)

    If this value is not set, the password type is assumed to be plain.

Below is a sample config file section:

<jive>
  ...
  <provider>
    <auth>
      <className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className>
    </auth>
  </provider>
  <jdbcAuthProvider>
     <passwordSQL>SELECT password FROM user_account WHERE username=?</passwordSQL>
     <passwordType>plain</passwordType>
   </jdbcAuthProvider>
   ...
  </jive>

You’ll most likely want to change which usernames are authorized to login to the admin console. By default, only the user with username “admin” is allowed to login. However, you may have different users in your LDAP directory that you’d like to be administrators. The list of authorized usernames is controlled via the admin.authorizedUsernames property. For example, to let the usersnames “joe” and “jane” login to the admin console:

    <jive>
      ...
      <admin>
        ...
        <authorizedUsernames>joe, jane</authorizedUsernames>
      </admin>

      ...
    </jive>

Another option is to use an AdminProvider. AdminProvider instances are responsible for listing the administrators users dynamically. The default use the authorizedUsernames setting previously explained. JDBCAdminProvider allows to list the administrators from a SQL query. For example:

<jive>
  ...
  <provider>
    ...
    <admin>
      <className>org.jivesoftware.openfire.admin.JDBCAdminProvider</className>
    </admin>
    ...
  </provider>
  <jdbcAdminProvider>
    <getAdminsSQL>SELECT userid FROM user_account WHERE administrator='Y'</getAdminsSQL>
  </jdbcAdminProvider>
  ...
</jive>

User Integration

Optionally, Openfire can load user data from your custom database. If you enable user integration you must also enable authentication integration (see above). Use the following settings to enable user integration.

  • provider.user.className — set the value to org.jivesoftware.openfire.user.JDBCUserProvider.
  • jdbcUserProvider.loadUserSQL — the SQL statement to load the name and email address of a user (in that order) given a username. The SQL statement should contain a single “?” character, which will be dynamically replaced with a username when being executed.
  • jdbcUserProvider.userCountSQL — the SQL statement to load the total number of users in the database.
  • jdbcUserProvider.allUsersSQL — the SQL statement to load all usernames in the database.
  • jdbcUserProvider.searchSQL — the SQL statement fragment used to search your database for users. the statement should end with “WHERE” — the username, name, and email fields will then be dynamically appended to the statement depending on the search. If this value is not set, searching will not be enabled.
  • usernameField — the name of the username database field, which will be used for searches.
  • nameField — the name of the name database field, which will be used for searches.
  • emailField — the name of the email database field, which will be used for searches.

Below is a sample config file section. Note that the single provider section must include all providers that should be configured:

<jive>
  ...
  <provider>
    <auth>
      <className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className>
    </auth>
    <user>
      <className>org.jivesoftware.openfire.user.JDBCUserProvider</className>
    </user>
  </provider>
  <jdbcAuthProvider>
     <passwordSQL>SELECT password FROM user_account WHERE username=?</passwordSQL>
     <passwordType>plain</passwordType>
  </jdbcAuthProvider>
  <jdbcUserProvider>
     <loadUserSQL>SELECT name,email FROM myUser WHERE username=?</loadUserSQL>
     <userCountSQL>SELECT COUNT(*) FROM myUser</userCountSQL>
     <allUsersSQL>SELECT username FROM myUser</allUsersSQL>
     <searchSQL>SELECT username FROM myUser WHERE</searchSQL>
     <usernameField>username</usernameField>
     <nameField>name</nameField>
     <emailField>email</emailField>
  </jdbcUserProvider>
   ...
 </jive>

Group Integration

Openfire can load group data from your custom database. If you enable group integration you must also enable authentication integration; you’ll also likely want to enable user integration (see above). Use the following settings to enable group integration.

  • provider.group.className — set the value to org.jivesoftware.openfire.group.JDBCGroupProvider.
  • jdbcGroupProvider.groupCountSQL — the SQL statement to load the total number of groups in the database.
  • jdbcGroupProvider.allGroupsSQL — the SQL statement to load all groups in the database.
  • jdbcGroupProvider.userGroupsSQL — the SQL statement to load all groups for a particular user. The SQL statement should contain a single “?” character, which will be dynamically replaced with a username when being executed.
  • jdbcGroupProvider.descriptionSQL — the SQL statement to load the description of a group. The SQL statement should contain a single “?” character, which will be dynamically replaced with a group name when being executed.
  • jdbcGroupProvider.loadMembersSQL — the SQL statement to load all members in a group. The SQL statement should contain a single “?” character, which will be dynamically replaced with a group name when being executed.
  • jdbcGroupProvider.loadAdminsSQL — the SQL statement to load all administrators in a group. The SQL statement should contain a single “?” character, which will be dynamically replaced with a group name when being executed.

Below is a sample config file section. Note that the single provider section must include all providers that should be configured:

<jive>
  ...
  <provider>
    <auth>
      <className>org.jivesoftware.openfire.auth.JDBCAuthProvider</className>
    </auth>
    <user>
      <className>org.jivesoftware.openfire.user.JDBCUserProvider</className>
    </user>
    <group>
      <className>org.jivesoftware.openfire.group.JDBCGroupProvider</className>
    </group>
  </provider>
  <jdbcAuthProvider>
     <passwordSQL>SELECT password FROM user_account WHERE username=?</passwordSQL>
     <passwordType>plain</passwordType>
  </jdbcAuthProvider>
  <jdbcUserProvider>
     <loadUserSQL>SELECT name,email FROM myUser WHERE username=?</loadUserSQL>
     <userCountSQL>SELECT COUNT(*) FROM myUser</userCountSQL>
     <allUsersSQL>SELECT username FROM myUser</allUsersSQL>
     <searchSQL>SELECT username FROM myUser WHERE</searchSQL>
     <usernameField>username</usernameField>
     <nameField>name</nameField>
     <emailField>email</emailField>
  </jdbcUserProvider>
  <jdbcGroupProvider>
       <groupCountSQL>SELECT count(*) FROM myGroups</groupCountSQL>
       <allGroupsSQL>SELECT groupName FROM myGroups</allGroupsSQL>
       <userGroupsSQL>SELECT groupName FROM myGroupUsers WHERE username=?</userGroupsSQL>
       <descriptionSQL>SELECT groupDescription FROM myGroups WHERE groupName=?</descriptionSQL>
       <loadMembersSQL>SELECT username FROM myGroupUsers WHERE groupName=? AND isAdmin='N'</loadMembersSQL>
       <loadAdminsSQL>SELECT username FROM myGroupUsers WHERE groupName=? AND isAdmin='Y'</loadAdminsSQL>
  </jdbcGroupProvider>
  ...
</jive>

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108466.html原文链接:https://javaforall.net

(0)
上一篇 2022年3月3日 下午6:00
下一篇 2022年3月3日 下午7:00


相关推荐

  • 俞敏洪新东方的起步_新东方俞敏洪的故事

    俞敏洪新东方的起步_新东方俞敏洪的故事来源:国王与王后丨作者: 果子离啊数据猿官网|www.datayuan.cn今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博…

    2025年11月2日
    4
  • [ Laravel 5.6 文档 ] 安全系列 —— 重置密码

    [ Laravel 5.6 文档 ] 安全系列 —— 重置密码

    2021年10月24日
    37
  • c语言字符串位运算举例,C语言位运算、移位运算 经典示例

    c语言字符串位运算举例,C语言位运算、移位运算 经典示例概述 C 语言的位级运算可以运用到任何 整数 的数据类型上 如 char short int long longlong 或者 unsigned 这样的限定词 基本的位运算有与 或 非 异或等等 C 语言的位移运算有两种 左移 右移 左移运算 x

    2025年11月17日
    4
  • Origin绘图快速上手指南

    Origin绘图快速上手指南1、创建工程打开origin后,点击菜单栏“文件”,选择“项目另存为”,给项目命名,并存到某个工作路径。2、导入数据然后将excel中的数据(只要数据)选中后复制到Book1中,从第5行开始粘贴。可以在侧面打开“项目管理器”,给表格“Book1”重命名为“曲线数据”。还可以在表格的“长单位”处给每列数据加上标签。3、那么这时可以直接使用Origin的自动绘图功能了。选择A、B、C所有列,然后点击菜单栏的“绘图”,选择一个折线图,双击即可绘图。这样呢就是将两条曲线放到同一张图中了。如果想要自定

    2022年5月31日
    56
  • java编译后执行 错误:找不到或无法加载主类「建议收藏」

    java编译后执行 错误:找不到或无法加载主类「建议收藏」使用java命令运行class文件提示“错误:找不到或无法加载主类“的问题分析有时候我们需要直接用jdk提供的java命令来执行class文件让软件运行起来,特别是很多初学者,但经常会发现如下提示:用eclipse或用ant则没有问题。其实原因很简单,我们忽略了2个细节。1.java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。2….

    2022年5月30日
    93
  • membership问题

    membership问题研究了一天的问题 耗了半包烟后终于搞定 谢谢 BAIDU 让我搜到了一个 谢谢群里热心的大大 Jacky 下面正题 1 membership 中的存储地址问题 在 ASP NET2 0 中用 Createuserwi 默认注册的用户存储在 net2005 的 sqlserver200 下 里面默认的一堆表名都是以 aspnet 开头的 我们所存储的 users 信息就在 aspne

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号