openfirespark二次开发服务插件.docx

上传人:b****1 文档编号:2475291 上传时间:2022-10-29 格式:DOCX 页数:7 大小:19.33KB
下载 相关 举报
openfirespark二次开发服务插件.docx_第1页
第1页 / 共7页
openfirespark二次开发服务插件.docx_第2页
第2页 / 共7页
openfirespark二次开发服务插件.docx_第3页
第3页 / 共7页
openfirespark二次开发服务插件.docx_第4页
第4页 / 共7页
openfirespark二次开发服务插件.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

openfirespark二次开发服务插件.docx

《openfirespark二次开发服务插件.docx》由会员分享,可在线阅读,更多相关《openfirespark二次开发服务插件.docx(7页珍藏版)》请在冰豆网上搜索。

openfirespark二次开发服务插件.docx

openfirespark二次开发服务插件

openfirespark二次开发服务插件

====================废话begin============================

最近老大让我为研发平台增加即时通讯功能。

告诉我用comet在web端实现即时通讯。

最初狂搜集资料。

不能让自己方向错了。

这是很重要的。

不过还是难免的周折了一番。

测试了一个comet4j的聊天小例子。

用它前后端开发成本太大、对服务器也太大压力放弃了。

最终决定使用openfire+jsjac.js+JabberHTTPBind然后实现老大要求的web及时通讯功能。

很庆幸找到了hoojo大哥的demo很不幸,他为了让大家复制代码,自己练习。

不提供jar包js下载。

(虽然好心但是足足浪费了我两天时间)一个jsjac.js库版本有问题。

很费劲的看源码。

哎。

然后、拿这个小demo先交差。

顺便展示了spark和web聊天窗口,交互即时聊天。

顺便构想了一下,修改openfire用户表。

让用户来自系统。

组织则用自带的。

(当然这是预想。

其实openfire已经帮我们想过了。

接着、全局搜索了openfire源码中包含ofuser表sql的类。

只有两个类。

很庆幸。

改了之后,改造用户密码加密认证方式。

当然这样做是错误的。

直到我发现类名字似乎有些不对的时候。

DefaultUserProvider哈哈、嘲讽啊。

不出所料有一个实现类JDBCUuserProvider。

直接配置就可以搞定、但是加密sha256加密过程和我平台不一样。

改造后就顺利搞定。

接着、到了插件开发过程。

这个过程很烦人。

网上很多帖子很多人去讲这个开发过程。

或许是两三年前的贴了。

很多过时了。

只能有一点帮助。

更多的是走向了错误的道路。

磕磕碰碰。

最终还是只能从源码中寻求出路。

这个过程整整浪费了我两星期时间。

很痛苦。

所以。

我会针对最新代码聊聊,spark开发一个组织架构树插件。

展示出用户。

并可以与之聊天。

打包openfire,spark插件过程。

打包项目为exe文件。

=======================废话end=========================

openfire10,出来啦。

^_^支持自定义组,性能优化很多。

本文内容有:

  1、openfire自定义用户表需要注意的地方

  2、openfire服务器插件开发(开发环境搭建不说了。

下载项目,目前3.10,3.93都没有任何错)

  3、openfire插件打包。

  3、spark插件开发

  4、openfire/spark打包exe

  

一、Openfire自定义用户表

userManager会在初始化的时候从数据库读取UserProvider/AuthProvider的实现类。

默认是defaultUserProvider

这些实现类参数被保存在ofproperty表中。

我们直接通过更新表完成对自定义用户表的配置。

insertintoofProperty(name,propValue)values

('jdbcProvider.driver','com.mysql.jdbc.Driver'),

('jdbcProvider.connectionString','jdbc:

mysql:

//主机地址/数据库?

user=root&password=root'),

--用户表数据库连接信息

('admin.authorizedJIDs','admin@127.0.0.1'),

--管理员账号信息,@amy-tang是安装openfire服务器时填写的IP,也可以写成服务器的域名。

('jdbcAuthProvider.passwordSQL','SELECTpasswordFROMsys_userWHEREaccount=?

'),

--校验用户名密码sql语句

('jdbcAuthProvider.passwordType','sha256'),--用户表加密方式

('jdbcUserProvider.loadUserSQL','SELECTfullname,emailFROMsys_userWHEREaccount=?

'),

--查询用户的sql语句

('jdbcUserProvider.userCountSQL','SELECTCOUNT(*)FROMsys_user'),

('jdbcUserProvider.allUsersSQL','SELECTaccountFROMsys_user'),

('jdbcUserProvider.usernameField','account'),

('jdbcUserProvider.nameField','fullname'),

('jdbcUserProvider.emailField','Email'),

--用户表关键字段的字段名称。

模糊查询用户拼装sql使用.account是账号唯一标示,fullname是用户名。

sys_user是用户表

UPDATEofPropertySETpropValue='org.jivesoftware.openfire.user.JDBCUserProvider'WHEREname='provider.user.className';

--设置用户数据库持久层实现类

UPDATEofPropertySETpropValue='org.jivesoftware.openfire.auth.JDBCAuthProvider'WHEREname='provider.auth.className'

--设置密码校验持久层实现类

注意事项:

1、加密key:

plain/md5/sha1/sha256/sha512加密过程详见org.jivesoftware.util.StringUtils.hash(password,"MD5");

     2、admin.authorizedJIDs=admin@主机地址当Openfire修改了主机地址/域名的配置后admin无法登陆服务器。

需要修改数据库中配置的主机地址,

二、Openfire服务器插件开发

1、openfire中插件目录介绍,以及开发前准备。

Openfire源码环境搭建很简单。

目前3.10版,3.9版都没有任何问题直接能用,不用多余下载任何jar。

将源码解压至工作空间,新建相同项目名称即可。

如图:

暂时没用的插件可以buildpathremovefrompath先从工作空间移除。

剩下需要的开发插件如上图右

10的sourceoutputfolder有点问题,指向了一个插件里面。

修改即可。

项目右键—》buildpath—》configurebuildpath..—》Source—》outputfolder:

openfire_src/bin

9问题也不多,网上很多文章都很有用可以检索openfire二次开发去查阅相关搭建开发环境的文章。

开发前,建议先吧xmldebugger插件打开,或者留在src中。

会把所有交互xml打印输出非常有利于调试。

开发插件前,我们可以先看下,自带的那些插件的目录结构。

可以看出来开发插件都是依赖项目开发的,这样直接可以引用项目中的资源,bean。

不建议单独起一个project去开发插件

2、插件开发介绍

例如组织架构插件,我是将它作为一个服务组件进行开发,对外提供组织树的服务。

当客户端访问服务器jabber:

iq:

loadOrg的服务的时候,根据提供的参数返回组织架构,与用户信息、该插件需要实现两个接口Component,Plugin。

贴下代码

OrgTreePlugin代码,

请看打开代码自己查看。

该插件需要实现两个接口Component,Plugin,并实现相应方法。

插件的初始在PluginManager中419行。

可以断点查看插件初始化过程。

419StringclassName=pluginXML.selectSingleNode("/plugin/class").getText().trim();

420plugin=(Plugin)pluginLoader.loadClass(className).newInstance();

服务注册也很简单如:

OrgTreePlugin代码initializePlugin方法。

componentManager.addComponent(serviceName,this);

只是需要注意的是,该服务注册为服务组件的时候,会测试的访问该服务,测试是否正常。

如果出现异常就会自动调用componentManager.removeComponent(serviceName);,将改服务移除服务组件。

具体代码可以查看InternalComponentManager的addComponent()方法。

代码很简单。

DefaultOrgTreeProvider则为数据访问层。

不再贴了。

插件目录结构如下:

3、插件打包

最初在看openfire插件开发相关文章的时候、都提供了很多打包的方法,不过用着很不开心。

其实项目已经提供了所有各个功能的ant脚本build目录下build.xml文件。

三、spark插件开发

spark插件开发与openfire大略相似,

需要自身了解AWT相关的知识。

打包插件需要注意一点在build.xml中targetname="build.plugins"添加自己插件。

这样运行antbuild.plugins的时候就可以打包自己的jar了

build.plugins

<subanttarget="">

<filesetdir="./src/plugins/orgTree/"includes="*/build.xml"/>

</subant>

获取请求服务,处理数据关键代码

//请求消息定义

publicclassOrgTreeLoadextendsIQ

 

privateJSONArraygetOrgTreeJSON(StringorgId)throwsXMPPException{

//获取host

Connectioncon=SparkManager.getConnection();

host=con.getHost();

OrgTreeLoadsearch=newOrgTreeLoad();

search.setType(org.jivesoftware.smack.packet.IQ.Type.SET);

search.setTo("loadOrg."+host);//消息包处理

search.addExtension(OrgTreePacketExtension.getNewPacketExtension(orgId));

PacketCollectorcollector=con.createPacketCollector(newPacketIDFilter(search.getPacketID()));

con.sendPacket(search);

IQresponse=(IQ)collector.nextResult(SmackConfiguration.getPacketRepl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1