问题最近在一个linux机器上建了一个openfire,hostname为“A”,用spark的时候,在server处填写对方IP可以登录
但发现用qxmpp以“username@IP/resource”为JID登录时返回“Not Authorized”,但如果用“username@hostname/resource”为JID,则返回“socket error”
之前用“username@hostname/resource”为JID访问本地windows上架设的openfire没问题。
解决
1、对Java不熟,想请同事调一下spark是如何登录成功的,因为种种原因未成
2、短时间内没在openfire日志里找到spark登录时的JID
3、仔细分析qxmpp的底层代码,发现了socket连接和收发数据的地方,看到了最基本的xmpp通信xml
4、和同事讨论,同事建议修改本地host文件,将hostname映射成IP。当时没有接受这个建议,觉得不是最终解决办法,因为不可能去用户机器上修改host。(但事后看,这种做法是对调试有帮助的)
5、对比同一程序登录本地openfire和linux上的openfire过程中与服务器的xml。前面还能看懂,后面的就多是类似加密过的字符串,看了也没用。不过这个调研中最有价值的收获就是发现当和服务器建立socket连接后,服务器会返回hostname。
6、用wireshark分别收集spark登录linux上的openfire和自己程序登录同一服务器的数据包。同样,前面还能看,后面看不懂
7、无奈之下,用“Not Authorized openfire”之类的关键字搜索,发现了一些类似问题的资料
8、开始没看懂,后来忽然意识到,登录openfire肯定要用“username@hostname/resource”,而在此之前,一定要保证和服务器建立socket连接。借这种思路,先在qxmpp源代码里硬编码建立socket连接时所用的host为linux机器的ip,而登录还是用“username@hostname/resource”,成功。
备注
1、这种改法是权宜之计,感觉真正的做法应该利用建立连接时获得的hostname组成JID。
分享到:
相关推荐
Openfire二次开发问题分析及解决资料,列举了二次开发过程中可能会遇到的问题及解决的把办法。
使用openfire和mysql,在android端建立连接,登录功能的实现,至于注册用户,是在openfire里实现的
openfire服务器+qxmpp协议 实现的一个最简单的即时通讯聊天程序客户端,填写对方jid即可发送消息给对方!
openfire mac系统安装文件 Openfire (formerly Wildfire) is a cross-platform real-time collaboration server based on the XMPP (Jabber) protocol.
解决Openfire strophejs网站 跨域访问问题,文件中有flXHR.js、strophe.flxhr.js跨域脚本,有个具体实例basic.html供参考
agsxmpp与openfire服务器登录,agsxmpp.dll修复登录和发消息的问题
Openfire最主要的功能是实现XMPP服务器,Openfire的核心功能可以概括为:连接管理、消息解析、消息路由、消息发送.
openfire管理平台,有许多问号,很多朋友以为是乱码问题,其实不是乱码问题, 是因为:openfire_i18n_zh_CN.properties(国际化的中文版文件)和配置openfire_i18n_en.properties(国际化英文版文件)相比少了一些属性,取不到...
先说一下为什么要写这篇博客,是因为本人在周末在研究XMPP和OpenFire,从网上下载了个Demo,但跑不起来,花了很长时间,经改造后,跑起来了,写个篇博文也是希望后边学习XMPP和OpenFire的同学下载后直接运行,少走...
openfire使用hazelCast集群
Openfire数据结构详解
openfire简介.pdf openfire简介.pdf
基于openfire服务器的的IM系统源程序,用基于QT的QXMPP协议库封装的
该 openfire 版本最好匹配 MySQL 5.7 的版本使用, 如果用 MySQL 8.0 以上的版本, 可能在配置 openfire 服务器时连接不上 MySQL 数据库
非常详细的openfire的表结构介绍,能够帮助你对openfire的表结构信息由清晰的认识
openfire webchat开发包!
jitsi 基于 openfire 的 视频通话 客户端
openfire 下载
openfire处理消息流程及openfire详细信息
Jwchat+openfire部署 Jwchat(验证成功)