OpenFire使用外部用户表认证

OpenFire用户认证使用外部数据库

OpenFire就不介绍了,功能很强大。用过OpenFire的会发现,在OpenFire的数据库中会发现ofuser表,该表就是登陆控制台用户(eg:http://localhost:9090)和 认证用户表(eg:用户spark做客户端,OpenFire做服务器,登陆发送消息)

首先,不建议直接看此方法。再次之前,建议看一下OpenFire官方的文档。熟悉一下 使用外部数据库认证用户的大致思路

文档在openfire_src\documentation\docs\index.html

Custom Database Integration Guide   用户数据整合指南

1. 官方文档说明:

按照官方的文档说明,理论在openfire_src_3_9_1\target\openfire\conf\openfire.xml这个文件中,直接加节点就可以了。但是最后没有行通,我是修改的数据库。

<jive>
   <jdbcProvider>
  <driver>com.mysql.jdbc.Driver</driver>
  <connectionString>jdbc:mysql://localhost/dbname?user=username&password=secret</connectionString>
  </jdbcProvider>
  <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>


这里用在另外一个项目中的account表来说明一下:

account表结构和ofuser表一样。只是把encryptedPassword作为存储md5加密的密码

jdbcProvider.driver 			com.mysql.jdbc.Drive//数据库驱动类
jdbcProvider.connectionString		jdbc:mysql://localhost:3306/myspring?user=root&password=admin //连接数据库的url包括用户名,密码
provider.auth.className 		org.jivesoftware.openfire.auth.JDBCAuthProvider//用户登陆认证类
jdbcAuthProvider.passwordSQL		SELECT plainPassword FROM account WHERE username=? //通过用户名查询密码的sql
jdbcAuthProvider.passwordType		md5 //密码加密方式 可选:plain(不加密),md5,sha1,sha256,sha512
provider.user.className 		org.jivesoftware.openfire.user.JDBCUserProvider  //查看用户的类,控制台查看用户/组
jdbcUserProvider.loadUserSQL 		SELECT name,email FROM account WHERE username=? //查询用户信息的sql
jdbcUserProvider.userCountSQL 		SELECT COUNT(*) FROM account//查询总数
jdbcUserProvider.allUsersSQL 		SELECT username FROM account//查询所有用户
jdbcUserProvider.searchSQL 		SELECT username FROM account WHERE//搜索用户(sql这样写,在控制台就可以通过用户名搜索)
jdbcUserProvider.usernameField 		username //指定控制台用户名对应的字段
jdbcUserProvider.nameField 		name //控制台名称对应的字段
jdbcUserProvider.emailField		 email //控制台电子邮件对应的字段


这里会发现两个类。有兴趣可以看一下OpenFire源码中 JDBCAuthProvider、JDBCUserProvider。这些sql在类的注释中都有demo



2. 修改数据库的方法:

把这些数据添加到ofproperty表中即可.

eg:

INSERT INTO `ofproperty` VALUES ('jdbcProvider.driver', 'com.mysql.jdbc.Driver');

provider.auth.classNameprovider.user.className这两条数据有的话添加会报错,修改就可以。

另外一种方式是登陆控制台,

服务器 --   服务器管理器  -- 系统属性   

eg:

属性名:jdbcProvider.driver

属性值:com.mysql.jdbc.Driver

把上面的属性都添加上去(属性名重复的会自动覆盖)

这里提供添加ofproperty表的sql.需要根据表结构的不同,做修改

INSERT INTO `ofproperty` VALUES ('jdbcProvider.driver', 'com.mysql.jdbc.Driver');
INSERT INTO `ofproperty` VALUES ('jdbcProvider.connectionString', 'jdbc:mysql://localhost:3306/myspring?user=root&password=admin');
UPDATE ofproperty SET propValue = 'org.jivesoftware.openfire.auth.JDBCAuthProvider' WHERE `name` = 'provider.auth.className';
INSERT INTO `ofproperty` VALUES ('jdbcAuthProvider.passwordSQL', 'SELECT encryptedPassword FROM account WHERE username=?');
INSERT INTO `ofproperty` VALUES ('jdbcAuthProvider.passwordType', 'md5');
UPDATE ofproperty SET propValue = 'org.jivesoftware.openfire.user.JDBCUserProvider' WHERE `name` = 'provider.user.className';
INSERT INTO `ofproperty` VALUES ('jdbcUserProvider.loadUserSQL', 'SELECT name,email FROM account WHERE username=?');
INSERT INTO `ofproperty` VALUES ('jdbcUserProvider.userCountSQL', 'SELECT COUNT(*) FROM account');
INSERT INTO `ofproperty` VALUES ('jdbcUserProvider.allUsersSQL', 'SELECT username FROM account');
INSERT INTO `ofproperty` VALUES ('jdbcUserProvider.searchSQL', 'SELECT username FROM account WHERE');
INSERT INTO `ofproperty` VALUES ('jdbcUserProvider.usernameField', 'username');
INSERT INTO `ofproperty` VALUES ('jdbcUserProvider.nameField', 'name');
INSERT INTO `ofproperty` VALUES ('jdbcUserProvider.emailField', 'email');

1. 看效果

ofuser表数据截图

使用内置数据库控制台:


另外项目的account

修改ofproperty表之后,使用account表作为认证表。重启OpenFire

控制台

说明:OpenFire控制台只支持admin用户登陆。添加用户的方法还在研究中



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值