openfire整合用户 之 改变密码验证方式

我要说的是改变openfire密码验证方式的方案,情形是这样的:在openfire默认的验证方式,主要借助DefaultAuthProvider,以登录操作为例,由BlowFish类提供加解密方案并由AuthFactory来管理对BlowFish的调用,从而完成用户输入密码的校验过程,具体过程大家可以跟代码,不过比较肯定的一点是openfire服务器在收到<auth />节的消息后开始校验工作的。

我看了网上的一些关于用户整合的资料,这个是openfire官方的资料http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/db-integration-guide.html,这个是某网友整理的资料http://hi.baidu.com/tonent/blog/item/8e4d00d536f477cf50da4b3b.html,可能站的高度比较高吧,说的也比较清楚,只是在我具体实现时会有各种各样的疑问。我目的是修改密码的加密方式,改为MD5加密,我的思路是借助JDBCAuthProvider验证登录,通过继承JDBCUserProvider重写createUser和deleteUser方法这样的方式,来创建删除用户。之所以选择继承是为了遵循闭合原则,保持原openfire的完成性,可以把继承类写在插件里,只要在配置provider.user.className参数时指定它的全路径名即可。注意新的isReadOnly()要return false,也就是告诉外部的调用者,该类(UserProvider)还可以完成修改数据的工作。

具体操作和上述链接所讲的差不多,不过由于我在开发中没有用到组的数据,所以provider.group.className仍取默认值,个人感觉这样做应该没什么问题。有点需要注意的是jdbcProvider.connectionString的值问题,如果直接在ofproperty表中添加数据可以直接写,如jdbc:mysql://localhost/dbName?user=user&password=password&useUnicode=true&characterEncoding=utf-8,不过在xml文档里配置的话要把&写成&amp;这样的形式。还有指定jdbcAuthProvider.passwordType为md5(想要的加密方式),不过查看JDBCAuthProvider的类注释可以看到它只支持plain,md5,sha1,sha256,sha512等加密方式,若是不在这个范围之内,要写自己的AuthProvider的。

如果上面说的不是很明白的话,一定要看代码,包括业务代码还有各种注释。通过堆栈跟踪具体的执行流程,我把DefaultAuthProvider和JDBCAuthProvider验证方式的堆栈调用贴出来吧,都是登录操作的代码执行过程。

上面是Default的,下面的是JDBC的,要注意DigestMD5Server和SaslServerPlainImpl的处理,最后都会交给XMPPCallbackHandler。前一种是在收到<response />节的内容开始的,后一种是收到<auth />节后开始。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值