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

来源:互联网 发布:淘宝上传照片尺寸 编辑:程序博客网 时间:2024/06/04 19:21

我要说的是改变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 />节后开始。


原创粉丝点击