欢迎来到天天文库
浏览记录
ID:40643268
大小:58.00 KB
页数:5页
时间:2019-08-05
《基于.NET架构带授权验证机制控件的开发》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、基于.NET架构带授权验证机制控件的开发1引言在开发商业软件时,往往需要给软件实现某种类型的许可,以限制非授权用户的使用。一般情况下,开发者会采取建立并检查特定的授权文件或在注册表中添加表项的方法来实现授权机制。但对于商业控件的开发而言,它所面对的对象是二次开发者而不是最终用户,采用传统的方法进行授权验证会有不少的问题。令人欣喜的是,.NET框架提供了内置的授权方案,利用它能非常方便的实现带授权机制的控件开发,并且开发者可以覆盖它并创建自己的授权验证方案。下面以开发一个只能输入数字的文本框为例,来探讨其实现过程。2创建只能输入数字的文本框.NET提供了大量的基本控件
2、,开发者可以采取继承和覆盖的方式,创建符合特殊需求的自定义控件。本例中只能输入数字的文本框,命名为NumericTextBox,继承自标准的TextBox类,但具有下列基本特性:l允许输入数字l仅允许输入一个小数点l允许输入一个减号,但必须是在文本框的首位l忽略用户输入的其他字符由于较简单,NumericTextBox的代码省略。生成项目,可产生NumericTextBox.dll文件。3.NET内置授权验证机制.NET框架提供了许可提供程序类(LicFileLicenseProvider类),将其与自定义控件绑定在一起,即可通过LicenseManager.Val
3、idate共享方法在控件的构造函数中自动检查授权信息。默认情况下,系统会在控件文件NumericTextBox.DLL所在目录下查找一个扩展名为lic的授权文件,其文件名是控件类的完整名称,例如:NumericTextBox程序集的NumericTextBox类的授权文件的名称应该是NumericTextBox.NumericTextBox.lic。这个lic文件是一个文本文件,.NET规定其内容为如下形式的一串文本:NumericTextBox.NumericTextBoxisalicensedcomponent.如果找不到这个文件,或者文件的内容不符,Numer
4、icTextBox控件在设计时和运行时都无法被使用,并引发一个异常。下图说明了这一过程:将自定义控件与许可提供程序类LicFileLicenseProvider绑定在设计或运行期间,创建控件对象时自动验证授权文件授权文件是否存在?内容是否正确?验证正确,正常创建控件对象验证不正确,给出异常提示,无法创建控件对象要实现绑定和验证,需要在NumericTextBox类的声明和“Windows窗体设计器生成的代码”部分作如下修改(黑体部分):ImportsSystem.ComponentModel'引用命名空间5、eLicenseProvider))>_PublicClassNumericTextBoxInheritsSystem.Windows.Forms.TextBox#Region"Windows窗体设计器生成的代码"PrivatelicAsLicensePublicSubNew()MyBase.New()lic=LicenseManager.Validate(GetType(NumericTextBox),Me)'验证授权InitializeComponent()EndSub'销毁License对象,而不是等待垃圾回收机制启动ProtectedOverloadsOve6、rridesSubDispose(ByValdisposingAsBoolean)IfdisposingThenIfNot(licIsNothing)Thenlic.Dispose()lic=NothingEndIfEndIfMyBase.Dispose(disposing)EndSub……EndClass重新生成NumericTextBox.dll文件,在新建的Windows应用程序中添加并验证此控件。当bin目录下有NumericTextBox.NumericTextBox.lic文件且内容符合要求时,NumericTextBox控件才能被使用;否则会弹出异常提7、示对话框。4自定义授权验证机制显然,由于授权文件的内容是相对固定的,内置授权验证机制非常容易被破解,只需将lic文件复制到控件(NumericTextBox.dll)所在目录下即可,用户甚至可以毫不费力的自己建立一个lic文件。通过建立自定义授权验证方案,可以很好地解决这一问题。自定义的许可提供程序类派生自LicenseProvider类,并重写其GetLicense虚拟方法,以实现自定义验证。同时将自定义许可提供程序类的名称作为参数传递给LicenseProvider属性,例如,自定义了一个用于授权验证的类LicWindowsFileLicensePrevid
5、eLicenseProvider))>_PublicClassNumericTextBoxInheritsSystem.Windows.Forms.TextBox#Region"Windows窗体设计器生成的代码"PrivatelicAsLicensePublicSubNew()MyBase.New()lic=LicenseManager.Validate(GetType(NumericTextBox),Me)'验证授权InitializeComponent()EndSub'销毁License对象,而不是等待垃圾回收机制启动ProtectedOverloadsOve
6、rridesSubDispose(ByValdisposingAsBoolean)IfdisposingThenIfNot(licIsNothing)Thenlic.Dispose()lic=NothingEndIfEndIfMyBase.Dispose(disposing)EndSub……EndClass重新生成NumericTextBox.dll文件,在新建的Windows应用程序中添加并验证此控件。当bin目录下有NumericTextBox.NumericTextBox.lic文件且内容符合要求时,NumericTextBox控件才能被使用;否则会弹出异常提
7、示对话框。4自定义授权验证机制显然,由于授权文件的内容是相对固定的,内置授权验证机制非常容易被破解,只需将lic文件复制到控件(NumericTextBox.dll)所在目录下即可,用户甚至可以毫不费力的自己建立一个lic文件。通过建立自定义授权验证方案,可以很好地解决这一问题。自定义的许可提供程序类派生自LicenseProvider类,并重写其GetLicense虚拟方法,以实现自定义验证。同时将自定义许可提供程序类的名称作为参数传递给LicenseProvider属性,例如,自定义了一个用于授权验证的类LicWindowsFileLicensePrevid
此文档下载收益归作者所有