我正在使用strophe.js在webapp上工作的xmpp客户端,根据我的用例场景,我必须快速切换到不同的页面。
当前的方法不安全,因为jid和密码在java脚本中可见,我正在寻找解决方案,在strophe客户端中实现安全性,并尝试使连接时间(使用bosh)更短。当我阅读jake moffitt的《使用JavaScript和jQuery进行XMPP编程》时,我发现了一个解决方案,可以解决我的以上两个问题,即实现会话机制。它说我们可以使用strophe attach(jid,sid,rid)来连接现有的连接,所以我需要SID和RID,这些可以从应用服务器获取!
书中给出了一个例子,当用户登录Web应用程序时自动连接到bosh服务器,作者使用Python中的Django项目进行了实现。由于我使用Java作为服务器端语言,我尝试使用Java Smack-4.0.3和Smack-bosh-4.0.3实现相同的示例,但无法连接到bosh服务器(我正在使用ejabberd作为XMPP服务器)。
我的代码如下:
BOSHConfiguration config = new BOSHConfiguration(false,"192.168.0.106",5280,"/http-bind/","192.168.0.106");
XMPPBOSHConnection xbc=new XMPPBOSHConnection(config);
xbc.connect();
xbc.login("admin", "admin");
System.out.println(xbc.getConnectionID());
堆栈跟踪
java.lang.ClassNotFoundException: org.xmlpull.v1.XmlPullParserFactory
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at org.jivesoftware.smack.SmackConfiguration.processConfigFile(SmackConfiguration.java:352)
at org.jivesoftware.smack.SmackConfiguration.processConfigFile(SmackConfiguration.java:347)
at org.jivesoftware.smack.SmackConfiguration.<clinit>(SmackConfiguration.java:155)
at org.jivesoftware.smack.ConnectionConfiguration.<init>(ConnectionConfiguration.java:67)
当我尝试登录BOSH服务器时,每次都失败了,我不确定出了什么问题,请问有人能解释一下吗?
还有一件事情我发现可以使用“xbc.getConnectionID()”获取会话标识符(SID),但如何找到请求标识符?
非常感谢您提前的帮助!