当前位置: 首页 > 编程日记 > 正文

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

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 logonPasswordstring 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 basicBusinessHandlerIFileBusinessHandler fileBusinessHandler, IFriendsManager friendsManager, IGroupManager groupManager);        

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

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

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

相关文章:

编程能力差,90%输在了这点上!CTO:这样学编程 ,更容易成为高手

从事 Python 这些年中&#xff0c;我见过很多 Python 教程和书籍&#xff0c;他们大都这样讲 &#xff1a;先介绍 Python 的基本语法规则、list, dict, tuple 等数据结构&#xff0c;然后再介绍字符串处理和正则表达式&#xff0c;介绍文件等 IO 操作.... 就这样一点一点往下说…

MVC 之 架构的基本原理及Asp.Net实现MVC

一、引言 许多Web应用都是从数据存储中检索数据并将其显示给用户。在用户更改数据之后&#xff0c;系统再将更新内容存储到数据存储中。因为关键的信息流发生在数据存储和用户界面之间&#xff0c;所以很多应用将数据和用户界面这两部分绑在一起&#xff0c;以减少编码量并提高…

vsftp虚拟用户

虚拟用户 1、建立虚拟用户口令库文件 #cat logins.txt mike 123 john 321 口令库文件中奇数行设置用户名&#xff0c;偶数行设置口令 2、生成vsftpd的认证文件 #rpm -ivh db4-utils* #db_load -T -t hash -f /root/logins.txt /etc/vsftpd/vsftpd_login.db 生成认证文件 设置…

在asp.net(C#)中怎么获得一个目录的大小?

作者&#xff1a;靶子&MSDN 出处&#xff1a;msdn 本方法来自以下文档,有问题多翻帮助 ;)ms-help://MS.NETFrameworkSDKv1.1.CHS/cpref/html/frlrfsystemiodirectoryclasstopic.htmms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpref/html/frlrfsystemiodirectory…

360金融首席科学家张家兴:我们如何做数据AI融合中台?

2020年7月3—4日&#xff0c;在CSDN 主办的第三届 AI 开发者万人大会&#xff08;AI ProCon 2020&#xff09;上。360金融首席科学家张家兴博士以“数据AI融合中台——金融领域人工智能实践”为题&#xff0c;揭秘了360金融在金融科技领域的前沿技术理念与实践心得。 张家兴认…

GoogleFusionTablesAPI初探地图与云计算

http://developer.51cto.com/art/200906/129324.htm http://yexiaochai.iteye.com/blog/1893735 http://yexiaochai.iteye.com/blog/1893734

关于ASPNET在IIS一些问题的经验总结

作者&#xff1a;未知 请速与本人联系 出处&#xff1a;mscommunity 很多开发人员对于IIS和ASPNET的安装等问题困扰,特此做下面的小总结,请大家多交流!iis 坏了修复办法!!!!!!! 一般IIS运行不了ASP.NET,试一下下面四种方法&#xff0c;99&#xff05;有效&#xff1a; 1。…

好莱坞科幻新片《b》,钦定 AI 机器人出演女主角!

来源 | HyperAI超神经由日本机器人教父石黑浩&#xff0c;历时多年打造的 AI 机器人 Erica&#xff0c;被好莱坞选中&#xff0c;出演科幻大片《b》中的女主角。如果成功完成拍摄&#xff0c;将成为影史上的一大创举。很多好莱坞科幻大片里&#xff0c;都有机器人的角色&#x…

原型开发、模型构建和设计反馈在线工具

Lumzy 你在创建新的UI技术任何时候&#xff0c;在创建网站之前&#xff0c;你会需要创造出一个作为概念根据的原型或模型。当然&#xff0c;你也要测试这些新构想。 Lumzy是一个方便的UI界面模型构建和原型开发的小型在线工具。它能让你创建具有工作功能的原型&#…

关于静态方法的使用方式

1。静态方法内不能使用非静态的类变量 2。静态方法内不能使用非静态的类方法

VS.NET 学习方法论

——我的VS.NET学习之旅 屠恩海&#xff08;SunHai&#xff09;开发工具&#xff1a;Microsoft Visual Studio .NET 2003操作系统&#xff1a;Windows XP题记&#xff1a;即使你没有一点编程经验&#xff0c;只要你愿意&#xff0c;并理解本文介绍的学习方法&#xff0c;你也可…

python标准库学习4

>>> os.environ["HOME"] C:\\Users\\Administrator>>> os.getcwd() #获得当前的目录 D:\\new >>> os.getenv("QTDIR") #获取环境变量的值 D:\\vs2010-qt-src-4.7.4\\qt-src-4.7.4 os.putenv(varname, value) #设置环境变量的…

通过三个直观步骤理解ROC曲线

作者 | Valeria Cortez来源 | DeepHub IMBAROC曲线是一个分类模型效果好坏评判的的可视化表示。在这篇文章中&#xff0c;我将分三个步骤头开始构建ROC曲线。步骤1&#xff1a;获取分类模型预测当我们训练一个分类模型时&#xff0c;我们得到得到一个结果的概率。在这种情况下&…

JAVA 实现 快速排序算法

2019独角兽企业重金招聘Python工程师标准>>> /*** 快速排序* * param list*/public static void fastSorted(int[] list, int i, int j) {if (i > j) {return;}int needToSortLen j;int referIndex i;while (i ! j) {while (list[referIndex] < list[j] &am…

Net 下安装、调试的常见问题与错误!!!

作者&#xff1a;多人 出处&#xff1a;csdn Q:新建项目时出错&#xff1a;Visual Studio .NET 已检测到指定Web服务器运行的不是ASP.NET 1.1版。您将无法运行ASP.NET Web应用程序或服务。Ahttp://support.microsoft.com/default.aspx?scidkb;en-us;817267--------------…

joomla 1.7遇到的麻烦——不能删除模板的解决办法

虽然最近了解了不少的 joomla 1.7的扩展&#xff0c;但大多都没有什么实战经验&#xff0c;所以从今天开始 准备不同的试用各类插件、并以实战的方式来记录这个过程。不过&#xff0c;在做这些之前&#xff0c;我试用了几个免费的模板&#xff0c;感觉还可以&#xff0c;不过毕…

疫情排查节时86%?不会代码也能玩转模型训练?腾讯大神揭秘语音语义及AutoML黑科技 | 内含福利...

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2020年7月3日&#xff0c;AI ProCon 2020 AI开发者万人大会&#xff0c;隆重举行&#xff01;作为CSDN策划并主办的系列技术「开发者大会」之一&#xff0c;本次大会通过线上直播的方式&#xff0c;吸引到了10000开发者…

js调用ios的方法

摘要 在做h5应用的时&#xff0c;有时有些功能js并不能实现的特别完美。比如下载进度条或上传文件进度等。如果能调用ios或者android的方法&#xff0c;实现进度&#xff0c;以及文件上传或者下载列表更好一些。如果使用第三方的js插件。又要考虑到ios和android的版本问题&…

可以弹出确认对话框的自定义Web服务器控件ConfirmButton

作者&#xff1a;活靶子[原创] 出处&#xff1a;AspxBoy.Com 经常在论坛里看到类似这样的问题&#xff1a;“…如何在点击删除按钮的时候弹出个确认删除对话框”。下面我们来自己写一个这样的自定义Web服务器控件!思路如下&#xff1a;继承System.Web.UI.WebControls.Butt…

阿里巴巴副总裁司罗:达摩院如何搭建NLP技术体系?

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;司罗把人工智能分为四个层面。在计算智能层面&#xff0c;近年来取得了一定成就&#xff0c;而在更高层面的感知、认知和创造智能上还在探索中。感知智能是指找出自然界的实体&#xff0c;比如找到新闻、故事中的人名、…

数字化校园passport

公共表&#xff1a;aspnetdb->membership,role,..... 用户表&#xff1a;用户名&#xff0c;昵称&#xff0c;真实姓名。tel,qq,mobile,email,用户类别 用户类别&#xff1a; 教师 学生 家长 贵宾 校友 网友 学年学期 班级 年级段 备课级组 处室 教师相关表&#xff1a; 任课…

fullPage教程 -- 整屏滚动效果插件 fullpage详解

为什么80%的码农都做不了架构师&#xff1f;>>> 本文为 H5EDU 机构官方 HTML5培训 教程&#xff0c;主要介绍&#xff1a;fullPage教程 -- 整屏滚动效果插件 fullpage详解 1、引用文件[html] view plain copy print?在CODE上查看代码片派生到我的代码片 <link …

用DataReader还是DataSet?

作者&#xff1a;Jonathan Goodyear 出处&#xff1a;网络 我经常听到有人问这个问题&#xff1a;“在ASP.NET Web应用程序中我应该用DataReader类还是DataSet类呢&#xff1f;”在很多文章以及新闻组的贴子中我经常看到这样的误解&#xff0c;即认为DataReader&#xff…

张钹院士:探索第三代人工智能,需要勇闯无人区的人才

整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】7 月 3-4 日&#xff0c;由 CSDN 主办的第三届 AI 开发者大会&#xff08;AI ProCon 2020&#xff09;在线上举行。本次大会有超万人报名参与&#xff0c;参与人群覆盖 50 领域、4000 家企业。其中…

C#删除文件夹

我们知道在c#中如果一个文件夹中有内容的话&#xff0c;直接使用Directory.Delete(文件夹)&#xff1b;是删不掉的&#xff0c;那么如何进行删除&#xff1f;下面这个两个方法可以帮助你。 1、采用递归的方式&#xff0c;先删除文件夹中的文件&#xff0c;然后删除空文件夹。 p…

PHPNow升级PHP版本为5.3.5的方法

在WIN上有时候需要测试一些PHP程序&#xff0c;又不会自行独立配置环境&#xff0c;那么PHPNow是非常好的选择&#xff0c;这篇文章主要为大家分享下如果将phpnow的php版本升级为5.3.5在WIN上有时候需要测试一些PHP程序&#xff0c;又不会自行独立配置环境&#xff0c;那么PHPN…

针对《评人工智能如何走向新阶段》一文,继续发布国内外的跟贴留言427-438条如下:

427&#xff0c;SNN机理性测试 SNN利用时空处理&#xff0c;脉冲稀疏性和较高的内部神经元带宽来最大化神经形态计算的能量效率。尽管可以在这种情况下使用常规的基于硅的技术&#xff0c;但最终的神经元突触电路需要多个晶体管和复杂的布局&#xff0c;从而限制了集成密度。论…

C#程序设计语言Version2.0简介

[翻译] lover_P 2004-01-26 ------------------------------------------------------------------------------------------------------------------------------------------------------------ 本文翻译自Microsoft官方参考材料&#xff0c;提供给我们的计算机科学技术网的…

腾讯布局移动应用商店 总下载量累计达40亿次

腾讯布局移动应用商店 总下载量累计达40亿次 腾讯应用中心产品总监祝涛29日在上海表示&#xff0c;移动互联网近年来在国内快速发展&#xff0c;腾讯应用中心作为国内最大的软件商店之一&#xff0c;截至目前总下载量已超过40亿次。 祝涛在当天由腾讯应用中心举行的一个开发者/…

iOS开源JSON解析库MJExtension

iOS中JSON与NSObject互转有两种方式&#xff1a;1、iOS自带类NSJSONSerialization 2、第三方开源库SBJSON、JSONKit、MJExtension。项目中一直用MJExtension来进行JSON与Model的互转&#xff0c;非常方便、强大&#xff0c;接下来介绍一下这个轻量、强大的开源库。 1、什么是MJ…