ESFramework 4.0 快速上手(15) -- 客户端登录验证

在之前版本的Rapid引擎中,是没有提供客户端登陆验证的机制的,如果要验证用户的帐号密码信息,我们只有自己手动通过自定义信息来实现。在2011.04.25发布的新版本中,客户端Rapid引擎,则内置了在初始化时验证用户的帐号密码的功能,这使得登录验证变得更加简单。

一. ESPlus.Application.Basic 空间的支持

为了实现验证用户账号密码的功能,ESPlus.Application.Basic 命名空间增加了几个基础设施。

(1)ESPlus.Application.Basic.Passive.IBasicOutter 增加了Logon方法:

        /// <summary>
        /// 客户端登陆验证。
        /// </summary>
        /// <param name="systemToken">系统标志。</param>
        /// <param name="password">登陆密码</param>      
        LogonResult Logon(string systemToken, string password);

该方法向服务端提交当前登录用户的账号、密码、系统标志等信息,然后返回服务端验证后的登录结果。系统标志systemToken,用于表示当前客户端来自哪个系统,服务端可以验证这个标志是否与服务端匹配,以判断客户端与服务端是否属于同一套系统。在普通的应用中,我们可以忽略它。

登录结果使用LogonResult 枚举表示:

    public enum LogonResult
    {
        /// <summary>
        /// 登陆成功
        /// </summary>
        Succeed = 0,
        /// <summary>
        /// 账号或密码错误
        /// </summary>
        ErrorUserOrPassword,
        /// <summary>
        /// 已在其它地方登陆
        /// </summary>
        HadLoggedOn
    }

如果我们的服务端的重登陆模式设置为RelogonMode.IgnoreNew,而本次登录所用的UserID已经在线上了,那么Logon方法将返回LogonResult.HadLoggedOn,以表明该用户已在其它地方登录。

(2)ESPlus.Application.Basic.Server空间增加IBasicBusinessHandler接口

当客户端提交了当前登录用户的账号、密码、系统标志等信息到服务端后,服务端通过调用IBasicBusinessHandler来验证帐户信息。

    public interface IBasicBusinessHandler
    {
        /// <summary>
        /// 客户端登陆验证。
        /// </summary>        
        /// <param name="userID">登陆用户账号</param>
        /// <param name="systemToken">系统标志。用于验证客户端是否与服务端属于同一系统。</param>
        /// <param name="password">登陆密码</param>
        /// <returns>如果密码和系统标志都正确则返回true;否则返回false。</returns>
        bool VerifyUser(string systemToken, string userID, string password);
    }

注意,我们在实现IBasicBusinessHandler时,并不需要判断重登陆模式和用户是否已经在线了,这些已经由框架帮我们做好了。所以,VerifyUser方法只是返回一个bool值,来表示帐号密码是否正确。在实现该接口,并将其注入到ESPlus,就可以通过调用IBasicOutter的Logon方法来验证用户了。

框架提供了null object模式的IBasicBusinessHandler实现EmptyBasicBusinessHandler,其在实现VerifyUser方法时,始终返回true。

二.Rapid引擎内置登录验证

本次版本变更中,客户端Rapid引擎和服务端Rapid引擎的Initialize方法都有所变化,以支持用户登录验证的机制。

(1)IRapidPassiveEngine 的Initialize方法:

   LogonResult Initialize(string userID, string logonPassword, string serverIP, int serverPort, IBasicBusinessHandler basicHandler, ICustomizeInfoBusinessHandler customizeHandler);

该方法新增加了登录密码logonPassword参数,并返回登录结果。

在内部实现中,Initialize方法首先与服务器建立TCP连接,然后通过IBasicOutter的Logon方法发送登录验证请求并获取登录结果,如果登录成功,则直接返回;否则,关闭TCP连接,再返回结果。要注意的是,如果与服务器建立TCP连接失败,Initialize会直接抛出对应的异常,而不是通过返回值来表达。

IBasicOutter的Logon方法所需的systemToken从哪里来了?IRapidPassiveEngine 新增了一个可读写的属性SystemToken,如果我们设定了它,Logon方法将会将其作为参数值传入。

在用户登录尝试的过程中,程序可以反复调用Initialize来进行验证,而不需要每次都new一个客户端Rapid引擎实例。只有Initialize方法返回登录成功后,Rapid引擎的相关属性才是可用的。比如,我们可以通过其新增的CurrentUserID属性,来知道当前成功登录的用户的UserID。

(2)IRapidServerEngine 的Initialize方法:

    void Initialize(int port, ICustomizeInfoBusinessHandler customizeInfoBusinessHandler, IBasicBusinessHandler basicBusinessHandler, IFileBusinessHandler fileBusinessHandler, IFriendsManager friendsManager, IGroupManager groupManager);        

服务端Rapid引擎的Initialize方法增加了IBasicBusinessHandler参数,正如前所述,服务端正是通过它来验证客户端提交的帐户信息的。如果我们不关心帐户验证,那么可以传入上面提到的EmptyBasicBusinessHandler实例,或直接传入null -- 此时,引擎内部将默认使用EmptyBasicBusinessHandler来处理用户的登陆验证。

(3)对于大多数系统,登录时使用账号密码就已经足够。有些特殊的系统,如果在登录时需要验证更多的信息(比如时间戳等),那么大家可以巧用IRapidPassiveEngine的SystemToken属性来传递这些额外的验证信息,因为SystemToken的值也会被提交给服务端的VerifyUser方法进行验证。

结合本次版本变更,我们已经发布了最新ESFramework、帮助文档、以及更新了所有Demo源码。大家可以从ESFramework 4.0 概述文末下载。

[转载]ESFramework 4.0 快速上手(15) -- 客户端登录验证相关推荐

  1. 监控自定义信息 —— ESFramework 4.0 快速上手(10)

    在ESFramework 4.0 进阶(02)-- 核心:消息处理的骨架流程一文中,我们介绍了通过挂接IMessageSpy到骨架流程,我们就可以监控到所有收发的消息.由于Rapid引擎已经为我们组装 ...

  2. 文件传送,如此简单--ESFramework 4.0 快速上手(13)

    在所有的通信系统中,文件传送是最常见也是最重要的功能之一,ESFramework对文件传送的强大支持也是其亮点之一,使用ESFramework可以非常轻松地实现与文件传送相关的所有需求.ESPlus. ...

  3. 在Silverlight中使用ESFramework-- ESFramework 4.0 快速上手(05)

    Silverlight已经到4.0版本了,已经相当成熟了,在Silverlight中使用socket与服务器进行通信也是常见的需求,所以,作为.NET平台的通信框架,ESFramework支持Silv ...

  4. 【转】Vue.js 2.0 快速上手精华梳理

    Vue.js 2.0 快速上手精华梳理 Sandy 发掘代码技巧:公众号:daimajiqiao 自从Vue2.0发布后,Vue就成了前端领域的热门话题,github也突破了三万的star,那么对于新 ...

  5. Vue2.0快速上手-重要知识点罗列-系列一

    Vue2.0快速上手 脚手架文件结构 ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src ...

  6. TensorFlow 2.0 快速上手教程与手写数字识别例子讲解

    文章目录 TensorFlow 基础 自动求导机制 参数优化 TensorFlow 模型建立.训练与评估 通用模型的类结构 多层感知机手写数字识别 Keras Pipeline * TensorFlo ...

  7. SQL2008R2 Reporting Services 報表產生器 3.0 快速上手

    今天去客戶那邊教了一堂 SQL Server 2008 R2 Reporting Services 基礎課程,雖然短短三個小時能教的東西不多但重點應該都點到了,而且快速上手之後只要有資料在手,透過內建 ...

  8. matlab中zoom使用说明,快速上手Zoom客户端使用指南分享

    Zoom移动端是现在主流的视频会议之一,在移动化快速演化的今天,Zoom视频会议也紧跟潮流,推出了移动端原生APP供用户随时随地完成视频会议,本期给大家整理了一些使用上的方法和技巧,帮助大家更快的上手 ...

  9. TensorFlow 2.0快速上手指南12条:“Keras之父”亲授 | 高赞热贴

    如何用TensorFlow 2.0 + Keras进行机器学习研究? 谷歌深度学习研究员."Keras之父"François Chollet发表推特,总结了一份TensorFlow ...

最新文章

  1. 10亿美元续命!OpenAI获微软投资,意在通用人工智能?
  2. windows driver 分配内存
  3. linux安装hadoop记录
  4. POJ1269 直线相交
  5. 《梦断代码》读书笔记
  6. 上古卷轴3晨风职业_巫师3:上古卷轴5老玩家,入手巫师3,体验昆特牌版“实验室”...
  7. html5视差滚动效果,视差滚动效果
  8. 面试中回答离职原因的万能公式
  9. C语言野指针产生的情况
  10. 如何做好Web 安全测试
  11. 东线报接口 全网一手线报全网(京东,淘宝,天猫)最全优惠信息
  12. 空洞卷积(Atrous convolution)
  13. 企业内部应用对接钉钉 -- 钉钉回调
  14. 码神之路博客部署总结补充
  15. 地球到火星的通信问题
  16. 织梦模板被植入index.html,织梦dedecms百度快照劫持注入代码防范
  17. Effective Java笔记(第二章)
  18. 主会场与分会场直播场景自由切换的实际应用效果
  19. 在英语课堂中培养学生音素觉知的初步探讨(Phonemic Awareness)
  20. UVC系列5-编写Android jni代码实现控制PTZ

热门文章

  1. DataList分页
  2. C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入
  3. Windows7 64bit VS2013 Caffe test MNIST操作步骤
  4. VLFeat开源库介绍及在VS2013中的编译
  5. python自定义随机数_python:numpy.random模块生成随机数
  6. html 图片剪裁控件,h5图像裁剪(基于canvas)插件Image-Clip
  7. python3 zipfile_python3中zipfile模块的常用方法
  8. 校园音乐点歌平台的设计与开发 微信小程序 点歌系统 java 开发
  9. mysqlselectdb php_PHP MySQL Select(数据库查询)
  10. ie9下console不兼容的问题