`
kerlubasola
  • 浏览: 710041 次
文章分类
社区版块
存档分类
最新评论

IM开发【5】 - 使用email作为用户名登陆openfire

 
阅读更多
首页»即时通信» IM开发之使用email作为用户名登录openfire

IM开发之使用email作为用户名登录openfire

日期:2010-05-25作者:firefish分类:即时通信阅读:3,242评论:5

现在有很多网站特别是贴上了“WEB2.0”标签的网站采用电子邮件地址作为用户名,个中缘由,本文不进行讨论。openfire本文要说的是,当你的网站使用了email作为用户名,而后又基于XMPP协议搭建了一个IM(即时通信)系统,你希望用网站的用户帐号直接登录IM(本blog的另外一篇日志《使用django的用户帐号登录openfire》对系统的基本搭建有较为详细的描述,可参考之),这里面会存在一个小小的问题需要进行一些特殊的处理。

到底是什么呢?呃,问题就出在email里的这个”@”符号上。在XMPP中@被定义为有着特殊用途的符号,XMPP的用户名被称为JID,JID由三个部分组成,像这样:test@abc.com/resource。你看到了,JID中包含一个@,@前面的是用户名,后面的是所在的域,斜杠后面的resource表示当前使用的客户端的名字。

所以,很明显的,email里的@和JID里的@冲突了!当然XMPP作为一个牛X的IM协议,它已经考虑到了这一点,它在扩展协议XEP-0106里进行了定义。

它的解决方案是将用户名里的特殊字符进行转义。也就是客户端在获得用户的登录名之后,进行一个转换,如此就可以保证发送到服务器的JID是没有冲突的合法字符串了。XMPP定义的特殊字符处理@之外还有其它的几个,有兴趣的同学请猛击这里围观XEP-0106:JID Escaping。

openfire目前已经支持了XEP-0106,函数定义在org.xmpp.packet.JID里,分别是escapeNode和unescapeNode。客户端我使用的是gloox的API,在1.0版里,gloox也增加了对XEP-0106的支持,在jid.cpp里可以找到这两个函数。如果你使用的是其它的不支持XEP-0106的客户端开发包,也很简单,自己按照协议的定义,写两个函数就好了。

有了这两个函数就好办了,首先在客户端取得用户输入的email,调用escapeNode函数对字符串进行转义,将转义后的字符串作为用户名发送登录请求。比如用户名是test@gmail.com,转义后则变成为test\40@gmail.com。

openfire在收到请求之后,会调用验证函数(请参考本blog的另外一篇日志《使用django的用户帐号登录openfire》实现自定义的验证)authenticate,该函数使用客户端提供的用户名密码到用户表去查询用户。那么我们需要做的是,在查询数据库之前,将转义过的@符号再转回来即可,像下面这样:

username = JID.unescapeNode(username);

另外一个处理用户信息的类,也就是表ofproperty的provider.user.className所指向的类,该类的loadUser函数,也需要对username进行同样的处理。

好了,经过这两步简单的处理,你现在可以用email作为用户名来登录基于openfire的IM系统了。

分享到:
评论

相关推荐

    Android-XMPP-openfire-实现IM

    本项目"Android-XMPP-openfire-实现IM"正是围绕着这三个关键元素进行的。以下是关于这个主题的详细知识点: 1. **XMPP协议**: - **定义**:XMPP是一种基于XML的实时通信协议,设计用于传输结构化信息,主要用于IM...

    XMPP_OPenfire即时通讯IM-android版

    9. **Android Studio开发环境**: 使用Android Studio作为集成开发环境,它提供了强大的代码编辑、调试和构建工具,简化了Android应用的开发流程。 在实现这些功能时,开发者还需要关注安全性和性能,例如使用SSL/...

    openfire3.10.1源码编译缺少的jar包

    openfire3.10.1源码编译缺少的jar包: jetty-websocket-8.1.17.v20150415 jnsapi mina-core-1.1.7-sources.jar mina-filter-compression-1.1.7-sources.jar mina-filter-ssl-1.1.7-sources.jar mina-filter-ssl.jar ...

    openfire-4.2.0-1.noarch.rp

    Linux环境下的openfire安装包,能够结合spark客户端进行即时通信

    openfire安装---及时聊天

    - 使用以下命令来启动 Openfire 服务,并检查其运行状态。 ```bash ./openfire start ./openfire status ``` ##### 5. 数据库配置 - 在 MySQL 中创建名为 `openfire` 的数据库。 ```sql CREATE DATABASE ...

    openfire开发文档

    Openfire 是一个开源的即时通讯(IM)服务器,基于XMPP协议,允许用户进行实时通讯。本开发文档主要介绍如何快速地开始Openfire插件的开发,并深入理解源码。 一、Openfire 源码部署与打包 1. 准备工作: 开发者...

    REST-API-Client:适用于Openfire的Java REST API客户端,可通过向服务器发送RESTHTTP请求来管理Openfire实例

    REST API客户端 REST API客户端是 基于Java的客户端,通过向服务器发送REST / HTTP请求,可以管理Openfire实例。资料库该项目可通过中央Maven存储库获得玛文< dependency> < groupId>org.igniterealtime</ groupId> ...

    IM(Spark+Smack+Openfire)开发资料详细说明文档

    本文档详细介绍了基于Spark、Smack和Openfire构建IM系统的开发过程和关键知识点,旨在帮助开发者更好地理解和实践。 1. **Spark**: Spark是一款开源的Web即时通讯客户端,支持多种平台,包括Windows、Linux和Mac ...

    openfire + spark 开发

    我们将从 XMPP 协议的介绍开始,接着讨论如何使用 Spark 和 Openfire 来实现一个完整的 IM 软件开发。 什么是 XMPP? XMPP(Extensible Messaging and Presence Protocol)是一种发送、接收和处理消息的协议。它...

    openfire-oju-plugin:使用Galene的Openfire视频会议引擎

    然后,下载Openfire-Oju-Plugin的源码包(如openfire-oju-plugin-master),解压后将插件文件放入Openfire的plugins目录下。重启Openfire服务器,插件即可自动加载。对于不熟悉命令行操作的用户,Openfire的管理界面...

    Pade - Openfire会议「Pade - Openfire Meetings」-crx插件

    Pàdé(约鲁巴语会议)是一个Chrome扩展,通过使用Openfire会议为音频,视频,桌面流和网页协同浏览提供统一的通信体验。 Openfire Meetings是一组Openfire插件,使用WebRTC和Jitsi为您的Openfire用户提供高质量,...

    ios即时通讯客户端开发之-mac上搭建openfire服务器 - 月光的尽头 - 博客园.webarchive ) 您可以上传小于60MB的文件

    ios即时通讯客户端开发之-mac上搭建openfire服务器 - 月光的尽头 - 博客园.webarchive ) 转发

    CVE-2023-32315-Openfire-Bypass-main.zip

    **Openfire 漏洞详解:CVE-2023-32315** Openfire 是一款基于 Java 的开源即时通讯服务器,它允许企业构建实时、安全的通信网络。然而,任何软件都有可能存在的安全漏洞,这正是 CVE-2023-32315 的关注点。这个安全...

    Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2

    Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2Openfire的IM Gateway插件kraken-gateway.jar 版本V1.1.2

    openfire-pade-plugin:Openfire的插件,可提供基于Web的统一通信-聊天,群组聊天,电话,音频和视频会议

    Pàdéfor Openfire该项目为Openfire提供了基于Web的统一通信解决方案。基于点对点的聊天,持续的群聊,音频,视频会议和实时流媒体,电话会议它包括第三方产品,特别是: 项目; 项目; Web客户端。 项目。基于项目...

    414502561-configuracion-openfire_openfire_

    openfire configuration and installation

    docker-openfire:Dockerized Openfire XMPP服务器

    Docker中的Openfire Dockerized Openfire XMPP服务器 基于Ubuntu GNU / Linux官方映像。 准备 拉图像 docker pull unixs/openfire 创建本地数据持久性目录 mkdir ~ /openfire 准备本地数据 只运行一次。 注意: ~...

    openfire Im android 客户端

    Openfire IM Android客户端是一款专为Android平台设计的即时通讯应用,它基于Openfire服务器,提供高效、安全且可自定义的聊天服务。Openfire是一款开源的XMPP服务器,支持多种协议,包括XMPP(Extensible Messaging...

    openfire-red5-spark-rtmps-required-files

    【标题】"openfire-red5-spark-rtmps-required-files" 涉及到的是一个针对企业内部通信的二次开发项目,它结合了Openfire、Red5和Spark这三款工具,以提供更加定制化的实时通信解决方案。 Openfire是一款开源的即时...

Global site tag (gtag.js) - Google Analytics