Openfire整合第三方(现有)用户系统
我使用的是MySQL作为Openfire的数据库,自有系统(只是测试)的数据库也采用的MySQL。
首先我新创建了一个数据库作为自有数据库进行测试,数据库名为 testdb,然后在testdb中新建了用户表users(username,password,name,email),并新增了几个用户信息作为测试。
修改Openfire服务器的系统属性
登录到Openfire管理平台(默认为 localhost:9090),配置完成后(配置过程很简单,网上也有很多相关文章可供参考),进入【服务器】->【服务器管理器】-> 【系统属性】 ,当然你也可以直接修改Openfire的数据库,对应的数据表为 ofproperty 。
1. 现有系统数据库连接配置
你需要配置你自有的用户系统的数据库连接参数,以用于Openfire连接到你自有的数据库并进行相关校验、查询等数据库操作。
新增以下属性值:
-
jdbcProvider.driver
设置数据库驱动,我的是MySQL数据库,所以驱动为:com.mysql.cj.jdbc.Driver
-
jdbcProvider.connectionString
数据库连接地址:jdbc:mysql://localhost:3306/testdb?username=数据库连接用户名&password=数据库连接密码
2. 修改身份验证程序相关配置
进入【服务器】->【服务器管理器】-> 【系统属性】,修改以下属性值:
-
provider.auth.className
将该值(org.jivesoftware.openfire.auth.DefaultAuthProvider)修改为
org.jivesoftware.openfire.auth.JDBCAuthProvider
DefaultAuthProvider与JDBCAuthProvider均实现了AuthProvider接口,用于实现用户登录校验。
因为我是在github上拉取的源码,配置后运行的Openfire项目,所有我们一起来看下源码中对应的类:
JDBCAuthProvider允许你通过连接任何你可以使用JDBC连接的数据库
JDBC身份验证提供了一个允许你根据任何一个你可以使用JDBC连接上的数据库对用户进行身份验证的程序。它也可以和 HybridAuthProvider 一起使用进行身份验证,这样你可以拥有不会污染外部数据的XMPP用户。
还需设置以下属性值:
属性名 | 属性值 | 说明 |
---|---|---|
jdbcAuthProvider.passwordType | SELECT password FROM users WHERE username=? | 查询用户密码SQL |
jdbcAuthProvider.passwordType | plain | (因为是测试,密码类型我就直接设置为明文模式,而实际使用中明文的情况很少。) 密码类型有以下几种值可以配置:plain、md5、sha1、sha256、sha512、bcryptBcrypt(支持作为密码类型;但是,当链接密码类型时,它必须是最后给定的类型。bcrypt散列每次生成时都不同) , 若不配置则默认为 plain 明文模式。 jdbcAuthProvider.passwordType 也可以接受以逗号分隔的密码类型字符串,这在存储旧(ex/md5)密码散列,然后“升级”为更强大的散列算法的情况下非常有用。Hash算法从左到右执行。例如 ‘md5,sha1’. |
jdbcAuthProvider.allowUpdate | true | 是否允许修改用户密码 |
jdbcAuthProvider.setPasswordSQL | UPDATE users SET password=? where username=? | 设置用户密码SQL |
jdbcAuthProvider.bcrypt.cost | 10 | bcrypt密码类型的配置值,默认值:10 |
如果不想使用 jdbcProvider.connectionString 属性值连接数据库进行校验,可配置 jdbcAuthProvider.useConnectionProvider = true
. 以下为JDBCAuthProvider中的变量,对应以上配置的属性值:
3. 修改用户系统操作程序相关配置
进入【服务器】->【服务器管理器】-> 【系统属性】,修改以下属性值:
-
provider.user.className
将该值(org.jivesoftware.openfire.auth.DefaultUserProvider)修改为org.jivesoftware.openfire.auth.JDBCUserProvider
DefaultUserProvider与JDBCUserProvider均实现了UserProvider接口,用于实现用户的增删改查等操作。
JDBCUserProvider允许你使用外部数据库来定义用户,最好是和JDBCAuthProvider联合使用。所有数据皆为read-only,即不可进行增删改操作。
还需配置以下属性值:
属性名 | 属性值 | 说明 |
---|---|---|
jdbcUserProvider.loadUserSQL | SELECT name,email FROM users WHERE username = ? |
加载用户SQL |
jdbcUserProvider.userCountSQL | SELECT COUNT(*) FROM users |
查询用户数量SQL |
jdbcUserProvider.allUsersSQL | SELECT username,name,email FROM users |
查询所有用户信息SQL |
jdbcUserProvider.searchSQL | SELECT username,name,email FROM users WHERE |
(根据关键字Username、Name、Email)搜索用户SQL |
jdbcUserProvider.usernameField | username |
自有数据库用户数据表(testdb.users)的对应的用户账号字段 |
jdbcUserProvider.nameField | name |
自有数据库用户数据表(testdb.users)的对应的用户名称字段 |
jdbcUserProvider.emailField | email |
自有数据库用户数据表(testdb.users)的对应的用户邮箱字段 |
同上,如果不想使用 jdbcProvider.connectionString 属性值连接数据库进行用户查询等操作,可配置 jdbcUserProvider.useConnectionProvider = true
. 以下为JDBCUserProvider中使用的变量,对应以上配置的属性值:
4. 设置管理员JID,用于登录Openfire管理平台
配置属性值:
-
admin.authorizedJIDs
该属性值表示Openfire的管理员账号JID,格式为:[email protected]
,即用户账号@Openfire服务器域名。可配置多个,多个以逗号隔开。我配置其值为[email protected]
.
所有配置都修改好后,重启Openfire服务,使用刚刚配置的管理员账号密码登录Openfire管理平台查看用户信息等。