天天看點

XMPP 之Openfire的使用者資料庫整合

openfire\documentation下的文檔有比較詳細的資訊

如果手動一步步設定

首先停止正常運作的Openfire伺服器

預設的庫ofProperty的如下記錄删除

provider.auth.classname

provider.user.classname

provider.group.classname

CREATE TABLE myUser (

username NVARCHAR(64) NOT NULL,

plainPassword NVARCHAR(32),

encryptedPassword NVARCHAR(255),

name NVARCHAR(100),

email VARCHAR(100),

creationDate CHAR(15) NOT NULL,

modificationDate CHAR(15) NOT NULL,

CONSTRAINT ofUser_pk PRIMARY KEY (username)

);

CREATE INDEX ofUser_cDate_idx ON myUser (creationDate ASC);

CREATE TABLE myGroupUser (

groupName NVARCHAR(50) NOT NULL,

username NVARCHAR(100) NOT NULL,

administrator INTEGER NOT NULL,

CONSTRAINT ofGroupUser_pk PRIMARY KEY (groupName, username, administrator)

CREATE TABLE myGroup (

description NVARCHAR(255),

CONSTRAINT ofGroup_pk PRIMARY KEY (groupName)

密碼加密方式:

plain md5 sha1 sha256 sha512

密碼采用明文:

<passwordSQL>SELECT plainPassword FROM myUser WHERE username=?</passwordSQL>

<passwordType>palin</passwordType>

密碼采用HASH:

<passwordSQL>SELECT encryptedPassword FROM myUser WHERE username=?</passwordSQL>

<passwordType>sha256</passwordType>

如下是一個myUser 中admin資料[myUser 插入admin/**資料,必須有一個,否則再次啟動時使用這個驗證時就沒法登入]

admin

8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918

[email protected]

2011-1-1      

openfire.xml 加入如下内容

<!-- Use Custome Database for user/group

  openfire_src/documentation/docs :: db-integration-guide.html database.html database-guide.html

-->

  <jdbcProvider>

    <!--

    <driver>com.mysql.jdbc.Driver</driver> 

    <connectionString>jdbc:mysql://localhost:3306/of?user=root&password=</connectionString>

    <![CDATA[ SQL SERVER驅動 jtds.sourceforge.net/faq.html ]]>

    <driver>net.sourceforge.jtds.jdbc.Driver</driver>

    <connectionString>jdbc:jtds:sqlserver://localhost/cust;appName=cust;user=of;password=of</connectionString>

  </jdbcProvider>

  <admin/>

  <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 plainPassword FROM myUser WHERE username=?</passwordSQL>

    <passwordType>palin</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 myGroup</groupCountSQL>

    <allGroupsSQL>SELECT groupName FROM myGroup</allGroupsSQL>

    <descriptionSQL>SELECT groupDescription FROM myGroup WHERE groupName=?</descriptionSQL>

    <userGroupsSQL>SELECT groupName FROM myGroupUser WHERE username=?</userGroupsSQL>

    <loadMembersSQL>SELECT username FROM myGroupUser WHERE groupName=? AND isAdmin='N'</loadMembersSQL>

    <loadAdminsSQL>SELECT username FROM myGroupUser WHERE groupName=? AND isAdmin='Y'</loadAdminsSQL>

  </jdbcGroupProvider>

再次啟動後,使用admin可以登入進去

預設的資料庫的[ofProperty]内容從配置檔案導入了,openfire.xml恢複原來的形式,檢視ofProperty

name

propValue

jdbcAuthProvider.passwordSQL

SELECT plainPassword FROM myUser WHERE username=?

jdbcAuthProvider.passwordType

plain

jdbcGroupProvider.allGroupsSQL

SELECT groupName FROM myGroup

jdbcGroupProvider.descriptionSQL

SELECT groupDescription FROM myGroup WHERE groupName=?

jdbcGroupProvider.groupCountSQL

SELECT count(*) FROM myGroup

jdbcGroupProvider.loadAdminsSQL

SELECT username FROM myGroupUser WHERE groupName=? AND isAdmin='Y'

jdbcGroupProvider.loadMembersSQL

SELECT username FROM myGroupUser WHERE groupName=? AND isAdmin='N'

jdbcGroupProvider.userGroupsSQL

SELECT groupName FROM myGroupUser WHERE username=?

jdbcProvider.connectionString

jdbc:jtds:sqlserver://localhost/cust;appName=cust;user=of;password=of

jdbcProvider.driver

net.sourceforge.jtds.jdbc.Driver

jdbcUserProvider.allUsersSQL

SELECT username FROM myUser

jdbcUserProvider.emailField

email

jdbcUserProvider.loadUserSQL

SELECT name,email FROM myUser WHERE username=?

jdbcUserProvider.nameField

jdbcUserProvider.searchSQL

SELECT username FROM myUser WHERE

jdbcUserProvider.userCountSQL

SELECT COUNT(*) FROM myUser

jdbcUserProvider.usernameField

username

provider.auth.className

org.jivesoftware.openfire.auth.JDBCAuthProvider

provider.group.className

org.jivesoftware.openfire.group.JDBCGroupProvider

provider.user.className

org.jivesoftware.openfire.user.JDBCUserProvider