我有一个工作的xmpp web客户端使用strophe,我目前的方法是从strophe登录用户的java脚本,但安全的角度来看它并不安全,在我的应用程序中我切换页面变化很快, 在搜索互联网上的时候,我发现Jake Moffitt已经给出了一个实现会话的解决方案,克服了这两个限制,正如他在书中提到的那样,使用java脚本"专业的xmpp,可以轻松实现会话并获得SID和服务器上的RID [必须从服务器创建xmpp bosh连接]并将其传递给java脚本(jid,sid和rid),这将比使用attach()方法与xmpp bosh manager连接,
我使用java作为服务器端语言,而有些人试图在java中实现boshclient看起来java smack和jbosh只是可用的解决方案(我的意思是工作解决方案), 但我无法找到任何方法可以使用java脚本获取RID和SID,我采用了另一种方法
为什么不在jvm之上运行strophe客户端,(为什么要在jvm上运行strophe?我能够在这个link上提到使用strophe java脚本,为什么要尝试这个解决方案在java)我已经在我的动态Web项目js.jar中将rihno包含在WebContent / WEBINF / lib中的lib文件夹中,并提供了一个运行env.rihno.js的限定路径,该路径在java上创建浏览器运行时并包含strophe.js和jquey.js文件并尝试连接到bosh clint,就像我在我的网络应用程序的javascript上所做的那样,
代码::
Context cx = ContextFactory.getGlobal().enterContext();
cx.setOptimizationLevel(-1);
cx.setLanguageVersion(Context.VERSION_1_5);
Global global = Main.getGlobal();
global.init(cx);
Main.processSource(cx, "/home/devwrat/workspace/Test/env.rhino.1.2.js");
Main.processSource(cx, "/home/devwrat/workspace/Test/jquery-1.11.1.js");
Main.processSource(cx, "/home/devwrat/workspace/Test/strophe.js");
Main.processSource(cx, "/home/devwrat/workspace/Test/boshconnection.js");
似乎一切都在java上工作正常,直到cinnection.connect()在我的java脚本中使用strophe执行,我观察到它与bosh manager没有连接。
我的问题如下 是否有可能在java中使用strophe建立bosh连接?是的如何?
提前致谢!!!!
编辑(2014年8月21日):: 我观察到在执行conn.connect(Arthur.jid,Arthur.password,function(status){print(status);})之后,状态为1,这又意味着连接状态正在连接,它总是说连接永远不会连接? ?可能是xmpp bosh经理没有验证连接!!!
答案 0 :(得分:0)
Strophe.js通常与客户端javascript一起使用。我认为你试图在服务器端运行Strophe.js会增加不必要的复杂性。
您提到了两个不同的问题,即将身份验证移至服务器端,以及维护页面更改之间的会话。
问题#1将身份验证移至服务器端(预绑定)
如果你想将登录过程移动到服务器端,那么你可以通过利用基于java的XMPP库或通过手动创建和发送节来实现这一点(不是很难,它基本上只是发送的XML) HTTP)认证过程所需的。一旦在服务器端建立了BOSH会话,会话的JID + RID + SID属性就可以传递到客户端javascript并由Strophe的attach()
使用。
为了编写你自己的BOSH预绑定器,你应该首先检查Strophe和ejabberd之间交换的节,你还应该阅读XEP-206。总之,您需要创建某种类型的HTTPClient,将其指向ejabberd的/ http-bind /地址,并开始向其发送与登录期间发送的相同的消息。您可以随时使用浏览器的网络调试器或Fiddler2(我推荐这个)来检查消息(节)。一旦了解了Strophe如何建立会话,您就可以开始编写自己的服务器端机制来建立会话。一旦在服务器端建立了会话,您就可以提取SID + RID + JID,并将它们发送到您的页面并与attach()
一起使用。
问题#2在页面更改之间维护会话
您说的第二个问题是您的应用程序经常更改页面。如果要实现在页面更改之间维护XMPP会话的机制,可以通过将strophes attach()
与存储JID + RID + SID的机制结合使用来完成。我使用LocalStorage和后退到AJAX的组合来实现这一目标。
BOSH和XMPP
您无法从许多XMPP库中提取RID和SID值的原因是因为它们不使用这些属性。 SID和RID与BOSH一起使用,这使我们能够使用HTTP与XMPP服务器通信。使用BOSH与Web服务器通信以与XMPP服务器通信,我们有3个级别:XMPP服务器本身,BOSH连接管理器和Web应用程序。由于HTTP是无状态的,而XMPP不是(它旨在维持持久连接),我们需要使用BOSH连接管理器来维护与XMPP服务器的持久连接。此连接管理器正在管理与服务器的会话并处理来自Web应用程序的间歇性请求,它能够使用Comet将消息推送到客户端。
为了让BOSH连接管理器验证来自Web应用程序的间歇性请求,我们在每个节中都包含一个SID和一个RID属性。 SID将在会话的生命周期内保持不变,并且RID将随每个传出请求递增1。正确递增RID非常重要,如果将具有意外RID的请求发送到连接管理器,会话通常会结束,连接管理器将返回错误。
希望有所帮助。