欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【ASP.NET Whidbey中实现Provider】,下面是详细的分享!
ASP.NET Whidbey中实现Provider
“Whidbey”是微软工具套件的下一个版本。按照微软的计划,它将会在2004年底推出。
Asp.Net2.0(codenameWhidbey)通过Provider模式为用户验证、角色管理等方面提供了非常强大易用的框架模型。Whidbey中提供了一个Asp.Netconfiguration工具,通过它可以非常容易地配置用户信息数据库,管理角色等等,再与新加入的Security控件配合,几乎不用写什么代码就能够实现用户验证和角色管理功能。关于这些控件和配置工具的具体使用,可以参考这篇文章:使用更精简的代码保证ASP.NET应用程序的安全
但是在PDCPreview版本的Whidbey中,这个配置工具的功能还不是很完善。从我使用的情况来看,它目前还只能创建和连接自己的Demo用的Access数据库,不能连接SQLServer数据库进行扩展。因此,为了能够连接SQLServer,我们必须提供我们自己的Providers。这里以连接IBuySpy的Portal数据库为例来说明如何实现一个MembershipProvider。
为了搞清楚如何实现我们自己的MembershipProvider,有必要先看看Whidbey默认使用的MembershipProvider是如何做的。在machine.config配置文件中,Whidbey使用类似下面这样的配置实现:
<membershipdefaultProvider="AspNetAccessProvider"userIsOnlineTimeWindow="15">
<providers>
<addname="AspNetSqlProvider"
type="System.Web.Security.SqlMembershipProvider,System.Web,Version=1.2.3400.0, Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
description="StoresandretrievesmembershipdatafromthelocalMicrosoftSQLServerdatabase"
/>
<addname="AspNetAccessProvider"
type="System.Web.Security.AccessMembershipProvider,System.Web,Version=1.2.3400.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"
connectionStringName="AccessFileName"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
description="StoresandretrievesmembershipdatafromthelocalMicrosoftAccessdatabasefile"
/>
</providers>
</membership>
关于这段配置文件的更详细解说,可以参考《AFirstLookatASP.NETv.2.0》。
可以看出,Whidbey默认使用SqlMembershipProvider或者AccessMembershipProvider来进行用户验证和管理。这两个Provider实现了IProvider和IMembershipProvider接口,实际上这两个接口也是每个MembershipProvider所必需的,其中IProvider负责Provider的初始化,而IMembershipProvider则实现MembershipProvider的主要功能。它们的定义如下:
namespaceSystem.Configuration.Provider
{
publicinterfaceIProvider
{
publicstringName{get;}
publicvoidInitialize(stringname,
System.Collections.Specialized.NameValueCollectionconfig);
}
}
namespaceSystem.Web.Security
{
publicinterfaceIMembershipProvider
{
publicboolChangePassword(stringname,stringoldPwd,stringnewPwd);
publicboolChangePasswordQuestionAndAnswer(stringname,stringpassword,
stringnewPwdQuestion,stringnewPwdAnswer);
publicSystem.Web.Security.MembershipUserCreateUser(stringusername,stringpassword,stringemail,outSystem.Web.Security.MembershipCreateStatusstatus);
publicboolDeleteUser(stringname);
publicSystem.Web.Security.MembershipUserCollectionGetAllUsers();
publicintGetNumberOfUsersOnline();
publicstringGetPassword(stringname,stringanswer);
publicSystem.Web.Security.MembershipUserGetUser(stringname,booluserIsOnline);
publicstringGetUserNameByEmail(stringemail);
publicstringResetPassword(stringname,stringanswer);
publicvoidUpdateUser(System.Web.Security.MembershipUseruser);
publicboolValidateUser(stringname,stringpassword);
publicstringApplicationName{get;set;}
publicboolEnablePasswordReset{get;}
publicboolEnablePasswordRetrieval{get;}
publicboolRequiresQuestionAndAnswer{get;}
}
}
现在可以动手来实现我们自己的MembershipProvider了:
publicclassMyMembershipProvider:IProvider,IMembershipProvider
{
……
}
验证功能是必需的:
publicboolValidateUser(stringname,stringpassword)
{
stringconnectStr=ConfigurationSettings.ConnectionStrings["PortalData"];
SqlConnectionmyConnection=newSqlConnection(connectStr);
SqlCommandmyCommand=newSqlCommand("UserLogin",myConnection);
myCommand.CommandType=CommandType.StoredProcedure;
//AddParameterstoSPROC
SqlParameterparameterEmail=newSqlParameter("@Email",SqlDbType.NVarChar,100);
parameterEmail.Value=name;
myCommand.Parameters.Add(parameterEmail);
SqlParameterparameterPassword=newSqlParameter("@Password",SqlDbType.NVarChar,20);
parameterPassword.Value=password;
myCommand.Parameters.Add(parameterPassword);
SqlParameterparameterUserName=newSqlParameter("@UserName",SqlDbType.NVarChar,100);
parameterUserName.Direction=ParameterDirection.Output;
myCommand.Parameters.Add(parameterUserName);
//Openthedatabaseconnectionandexecutethecommand
myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
if((parameterUserName.Value!=null)&&(parameterUserName.Value!=System.DBNull.Value))
returntrue;
returnfalse;
}
现在在web.config中可以这样配置connectionString了:
<connectionStrings>
<addname="BugDepotData"connectionString="DataSource=(local);Trusted_Connection=true;Database=Portal"/>
</connectionStrings>
这样,我们自己的一个简单的MembershipProvider就基本上完成了。接下来需要配置web.config,让需要Provider服务的控件能够认识它:
<membership>
<providers>
<addname="MyMembershipProvider"type="MyMembershipProvider"appName="/"/>
</providers>
</membership>
这段设置是参考machine.config而来的,其中type属性的值是这样的字符串:
type="ProviderType,Assembly,Version,Culture,PublicKeyToken"
由于我们的MyMembershipProvider放在/Code目录下,并不是在单独的Assembly中,因此只需要指出ProviderType就行了。
这样,一个具有验证功能的Provider就完成了,现在可以在页面上放一个新的Security控件,比如Login控件,并指定它的MembershipProperty为MyMembershipProvider(或者也可以设置membership的defaultProvider属性为MyMembershipProvider),打开Forms验证,试试是不是已经能够成功登陆了?
以上所分享的是关于ASP.NET Whidbey中实现Provider,下面是编辑为你推荐的有价值的用户互动:
相关问题:NET是什么意识,代表着什么?
答:自从比尔·盖茨在2000年提出.NET战略,五六年过去了,人们对到底什么是.NET仍然不是很清楚。这篇文章的目的就是希望能够阐明.NET的内在含意,.NET的缘由以及.NET技术的应用场景。 大家对.NET概念上的迷惑,部分的原因是由于微软自己不十分清晰的... >>详细
相关问题:ASP.NET程序设计的网络调查~!!
答:ASP.NET的发展历程,ASP.NET特性,ASP.NET运行原理、运行机制及环境的安装与搭建,只有对ASP.NET有了一定的认识,才能进行ASP.NET的下一步学习,一个良好的开始,是成功的一半。 本章将从初学者的角度考虑,学习ASP.NET从零开始,掌握ASP.NET的... >>详细
相关问题:WebForm1.aspx.resx是什么文件来的
答:ASP.NET Whidbey 中新的代码 >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
