在上一篇文章里面提到过,由于websocket使用的是类socket方式与xmpp服务进行交互,因此没有办法像bosh那样在web后台先登录成功后,然后利用返回的sid和rid进行会话还原。那现在就是要思考使用websocket的前端怎么实现用户在web上登录成功了,websocket登录xmpp服务器也一并成功呢?而且还要实现用户切换刷新web页面,xmpp会话不掉线呢?

最初我想的是,是否要重新自定义xmpp的SASL身份验证协议或修改websocket流程?后来参考OAuth2.0协议,想到的是是否可以给登录成功的web用户发行token,然后xmpp的SASL的身份验证采用这个发行的token来进行验证登录呢?结合openfire 4.2.3我做了一下实践,效果还算不错。具体时序图如下:

xmpp身份验证SASL协议,使用的是DIGEST-MD5方式验证,由于由web端控制token的发行和时效,只要用户web session超时,或用户退出,那么token就失效,因此保证了用户帐户的安全性。

而对于实现用户切换刷新web页面不退出,就是反复登录;用户进入一个web页面就调用API获取一下web端的token,再用token重新登录一下xmpp实现不掉线。但这也有一个缺点就是会造成传统的xmpp客户端在接收这个用户状态时,会提示过多的下线上线信息,但这些对于高度定制化的客户端来说是可以修改的,整体功能影响不大。

如果服务器是openfire的话,这里提供修改源代码的思路:

添加插件,使用setProperty方法设置对应的继承org.jivesoftware.openfire.auth.JDBCAuthProvider类的Auth Provider。JiveGlobals.setProperty("provider.auth.className", "com.example.TokenAuthProvider");

重写JDBCAuthProvider的getPassword(String username)方法.

踩过的坑: 对于这个我们实现的TokenAuthProvider类,最好封装为JAR包放入安装openfire的lib目录下面,方便openfire加载引用。否则直接写入插件JAR包中,可能导致过段时间后openfire加载TokenAuthProvider类失败,就变成加载DefaultAuthProvider类,最终SASL身份验证失败的问题。

参考:

xmpp java websocket_Websocket整合登录XMPP的思考相关推荐

  1. Java开发 - 单点登录初体验(Spring Security + JWT)

    目录​​​​​​​ 前言 为什么要登录 登录的种类 Cookie-Session Cookie-Session-local storage JWT令牌 几种登陆总结 用户身份认证与授权 创建工程 添加 ...

  2. JAVA WEB整合开发王者归来 -- 读书笔记 by CZF 完整版

    JAVA WEB整合开发王者归来 -- 读书笔记  目录 第1章 概述. 1 第2章 搭建web开发环境. 1 第3章 Servlet技术. 1 第4章 深入JSP技术. 7 第5章 会话跟踪. 12 ...

  3. java王者归来pdf_《JAVA WEB整合开发王者归来》刘京华.pdf

    全书分为9篇,内容层次清晰,难度循序渐进.第1篇为入门篇,内容包括JavaWeb开发概述等:第2篇为基础篇,内容包括Servlet技术.JSP技术.会话跟踪.过滤器Filter.监听器Listener ...

  4. mongocollection java_mongodb与java的整合

    mongodb的相关命令我们这里不在赘述,因为其文档下写的非常清楚,也很容易懂.这里我们说一下其余java的整合,mongodb配置请查看官方文档 1.首先我们应该导入期相关依赖, org.mongo ...

  5. Java爬虫模拟登录——不给我毛概二的H某大学

    你的账号访问太频繁,请一分钟之后再试! 从大一开始 就用脚本在刷课 在专业课踢的只剩下一门C#的情况下 活活刷到一周的课 大二开始教务系统多了一个非常**的操作 退课池 and 访问频繁缓冲 难道,我 ...

  6. java创建描述文件,IT技术交流:Java 轻量级整合开发

    原标题:IT技术交流:Java 轻量级整合开发 ervlet-ActionServlet 控制器,接受用户请求和状态改变,以及发出视图选择 FilterDispatcher Action 控制器的一部 ...

  7. webspere php,Project Zero、WebSphere sMash、PHP和JAVA的整合

    Project Zero.WebSphere sMash.PHP和JAVA的整合 从架构设计方面考虑,很多系统采用了 Java Bridge把php和JAVA技术结合起来,利用PHP的快速响应和JAV ...

  8. java仿qq登录 界面设计,Java Swing仿QQ登录界面效果

    本文实例为大家分享了Java Swing仿QQ登录界面展示的具体代码,供大家参考,具体内容如下 闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans.MyEcl ...

  9. 关于Java类加载双亲委派机制的思考(附面试题)

    转载自 关于Java类加载双亲委派机制的思考(附面试题) 预定义类加载器和双亲委派机制 JVM预定义的三种类型类加载器: 启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 &l ...

最新文章

  1. Vue项目中跨域的几种方式
  2. Java的Exception和Error面试题10问10答
  3. python输入球的半径_基于用户输入半径的Myro移动机器人
  4. JavaScript 进行数值与对应的 ASCII 字符之间的转换【from​Char​Code、from​Code​Point、charCodeAt、code​PointAt】
  5. android+主界面所有应用程序图标添加统一背景主题,Android 4.0替Launcher主界面所有应用程序图标添加统一背景主题...
  6. yarn 怎么查看有多个job在跑_flink on yarn 模式下提示yarn资源不足问题分析
  7. 121_Power Query之R.Execute的read.xlsxODBC
  8. centos系统使用snap安装软件(还是别用吧)
  9. 头秃,在线求名字:网易使用昵称交流,再也没有“哥,姐,总”!
  10. 5、手把手教React Native实战之盒子模型BoxApp
  11. final修饰的对象咋办?
  12. C语言编写一个计算字符串长度的函数 my_strlen();
  13. win8专业版和win8.1专业版安装密钥key及其永久激活工具
  14. ppi 各代iphone_iPhone全机型尺寸分辨率PPI大全
  15. cidaemon.exe进程
  16. 职场人一起进阶吧(内附技术人进阶路径、Java开源项目完整推荐等)
  17. 易优CMS插件易优CMS智能改写插件
  18. 后端利用MultipartFIle类型参数接受文件上传
  19. 反素数 Antiprime(信息学奥赛一本通 1625)(洛谷 1463)
  20. 卡通爆炸logo展示片头片尾动态视频AE模板

热门文章

  1. GXT之旅:第四章:Data与Components(4)——远程数据(remote data)
  2. java工程师个人简历模板
  3. ART-Pi 电路原理图浅析
  4. Redis介绍和使用
  5. 【修电脑】Windows11主机输入法不受控制频繁中英文切换/Vmmem进程占用内存大
  6. 嵌入式设计课程总结(一)
  7. LTE射频拉远单元数字中频方案(三)
  8. 修改代码的艺术(奋斗的小鸟)_PDF 电子书
  9. 虚拟机 IP 通过Windows 防火墙 设置
  10. https://app.hackthebox.com/machines/Squashed