用emial登陆openfire

 

XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。

XMPP是开源的中最受欢迎的即时通讯的应用协议.许多知名的国人所熟知的IM软件都是基于此协议或支持此协议.如:Google Talk/网易泡泡/MirandaIM等等…

而在国内本来最适合企业内部应用的IM系统应该是RTX的,可惜Tencent太讨厌,也狡猾狡猾的…免费的先让你用上瘾了,然后突然不让用了.实在是让人恨得牙根痒痒的.无奈只好另外再找免费的了,话说想找一个又免费功能又可以跟RTX媲美的还真不容易,我前前后后花了一两个月的时间,安装了无数的IM软件进行对比,最后无奈的发现,能做到比RTX更好或甚至于跟它差不多,居然还真没有.

本着少花钱多办事的原则,我把眼光转向了颇有好评的XMPP,XMPP里边做得最好的最著名的就是Openfire.
为此我特地分别在Windows/Centos/Freebsd里边分别安装Openfire来进行测试和试用.

Openfire在Windows下边安装起来非常简单,几乎不用怎么设置,也不用怎么等待,一下子就装好了.
Centos里边也不难,大致几个步骤就能安装完毕.
不过Freebsd里边稍微麻烦一点点,用ports去安装,系统会提示你需要去java的官网下载若干文件或补丁,然后放置到指定目录,再去安装,就也可以继续安装了.

总之,Openfire的安装还是很容易的.安装完成之后,可以打开浏览器,输入管理地址:

http://server:9090/

来进行设置.

Openfire支持使用MySQL做为管理数据库.也支持使用第三方认证数据库进行用户验证.以下可以做一个简单的介绍.
以企业内部应用为例,为每个部门建立一个组,然后使用公司的邮箱系统进行验证.
在Openfire的数据库RTC之外,另外建立一个rtc_auth的数据库,数据库中建立两个表,如下:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE `Depts` (
`DeptName` char (20) COLLATE utf8_unicode_ci DEFAULT NULL ,
`DeptOrder` int (2) DEFAULT NULL ,
`DeptAdminUserName` char (20) COLLATE utf8_unicode_ci DEFAULT NULL ,
`DeptDescription` char (200) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE =utf8_unicode_ci;
  
CREATE TABLE `Users` (
`UserName` char (25) COLLATE utf8_unicode_ci DEFAULT NULL ,
`UserDisplayName` char (50) COLLATE utf8_unicode_ci DEFAULT NULL ,
`Gender` char (2) COLLATE utf8_unicode_ci DEFAULT NULL ,
`DeptName` char (20) COLLATE utf8_unicode_ci DEFAULT NULL ,
`Position` char (30) COLLATE utf8_unicode_ci DEFAULT NULL ,
`UserEmailAddress` char (50) COLLATE utf8_unicode_ci DEFAULT NULL ,
`UserPassword` char (200) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE =utf8_unicode_ci;

 

然后在rtc数据库中的ofProperty表中加入如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
INSERT INTO `ofProperty` VALUES ( 'jdbcAuthProvider.passwordType' , 'md5' );
INSERT INTO `ofProperty` VALUES ( 'jdbcUserProvider.allUsersSQL' , 'select UserName from Users' );
INSERT INTO `ofProperty` VALUES ( 'jdbcProvider.driver' , 'com.mysql.jdbc.Driver' );
INSERT INTO `ofProperty` VALUES ( 'jdbcAuthProvider.passwordSQL' , 'select UserPassword from Users where UserName=?' );
INSERT INTO `ofProperty` VALUES ( 'jdbcUserProvider.emailField' , 'UserEmailAddress' );
INSERT INTO `ofProperty` VALUES ( 'jdbcUserProvider.loadUserSQL' , 'select UserDisplayName,UserEmailAddress from Users where UserName=?' );
INSERT INTO `ofProperty` VALUES ( 'jdbcUserProvider.nameField' , 'UserDisplayName' );
INSERT INTO `ofProperty` VALUES ( 'jdbcUserProvider.userCountSQL' , 'select count(*) from Users' );
INSERT INTO `ofProperty` VALUES ( 'jdbcUserProvider.usernameField' , 'UserName' );
INSERT INTO `ofProperty` VALUES ( 'provider.admin.className' , 'org.jivesoftware.openfire.admin.DefaultAdminProvider' );
INSERT INTO `ofProperty` VALUES ( 'provider.auth.className' , 'org.jivesoftware.openfire.auth.JDBCAuthProvider' );
INSERT INTO `ofProperty` VALUES ( 'provider.group.className' , 'org.jivesoftware.openfire.group.JDBCGroupProvider' );
INSERT INTO `ofProperty` VALUES ( 'provider.lockout.className' , 'org.jivesoftware.openfire.lockout.DefaultLockOutProvider' );
INSERT INTO `ofProperty` VALUES ( 'provider.securityAudit.className' , 'org.jivesoftware.openfire.security.DefaultSecurityAuditProvider' );
INSERT INTO `ofProperty` VALUES ( 'provider.user.className' , 'org.jivesoftware.openfire.user.JDBCUserProvider' );
INSERT INTO `ofProperty` VALUES ( 'provider.vcard.className' , 'org.jivesoftware.openfire.vcard.DefaultVCardProvider' );
INSERT INTO `ofProperty` VALUES ( 'xmpp.auth.anonymous' , 'false' );
INSERT INTO `ofProperty` VALUES ( 'jdbcGroupProvider.groupCountSQL' , 'select count(*) from Depts' );
INSERT INTO `ofProperty` VALUES ( 'jdbcGroupProvider.allGroupsSQL' , 'select DeptName from Depts order by DeptOrder' );
INSERT INTO `ofProperty` VALUES ( 'jdbcGroupProvider.descriptionSQL' , 'select DeptDescription from Depts where DeptName=?' );
INSERT INTO `ofProperty` VALUES ( 'jdbcGroupProvider.userGroupsSQL' , 'select Depts.DeptName from Depts,Users where Depts.DeptName=Users.DeptName and Users.UserName=?' );
INSERT INTO `ofProperty` VALUES ( 'jdbcGroupProvider.loadMembersSQL' , 'select Users.UserName from Users,Depts where Depts.DeptName=Users.DeptName and Depts.DeptAdminUserName<>Users.UserName and Depts.DeptName=?' );
INSERT INTO `ofProperty` VALUES ( 'jdbcGroupProvider.loadAdminsSQL' , 'select Users.UserName from Users,Depts where Depts.DeptName=Users.DeptName and Depts.DeptAdminUserName=Users.UserName and Depts.DeptName=?' );

这样,Openfire的服务器就可以使用以MD5加密密码的邮件系统验证的用户来进行登录了(嗯,这话有点儿拗口).

为了能得到近似或好于RTX的用户体验,我几乎试用了所有Wiki里边提到的免费的XMPP客户端.很遗憾居然没有一个真正合适的.最后我还是选择使用Openfire官方出品的Spark.
总的来说,Spark是XMPP的客户端中功能比较全面的一个,也很稳定,使用起来也很方便.常用的操作系统都有可以使用的客户端.

也说说它的一些问题吧.
它的设置太简单,简单到连聊天的字体都无法设置;
作为一款基于java应用的软件,它的界面没有普通Windows客户端使用起来那么舒服.在使用中文语言的时候,界面的字体比较怪且小;
spark不支持离线文件….不知道是XMPP不支持还是Spark不支持….反正就是不支持…可惜啊….
而且好象是XMPP客户端的一个通病,XMPP的群聊都比较麻烦,远没有RTX那样直接选一些人或一个组就可以群聊,XMPP要弄一个聊天室才可以;
RTX在聊天的时候截屏可以直接显示在聊天窗口中,Spark也有截屏功能,不过是把截屏内容文件的方式传送出去,不够直观;
Spark虽然是内置多语言的,不过它的简体中文的翻译比较怪异,怪异到我有相当的理由相信它是直接从繁体中文转过来的,现在官网的2.5.x版本甚至从中文切换到其它语言之后不能直接从程序界面切换回来.当然,最新的2.6rc已经修正了这个Bug.

目前已经在公司内使用了一段时间,除了聊天界面的字体丑得无法让人忍受之外,其它的还可以慢慢接受了…

总的来说,Openfire+Spark是目前比较合适的可以替代RTX之类的免费开源的IM解决方案.虽然还有不完善的地方,但希望日后能慢慢改善吧.

你可能感兴趣的:(数据库,null,insert,FreeBSD,聊天,XMPP)