首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

15.2  通过基于属性的编程改变提供程序的行为

要修改.NET Framework 2.0内置的提供程序的行为,最简单的方式是通过基于属性的编程。在ASP.NET 2.0中,可以通过使用属性,修改相当高级的行为。可以在各个应用程序配置文件中应用服务器控件和设置。使用machine.config文件或web.config根文件中的提供程序定义,可以改变提供程序的行为。本章将举例说明如何修改SqlMembership Provider。

15.2.1  通过SqlMembershipProvider建立简单的密码结构

在用SqlMembershipProvider实例创建用户时,无论是使用SQL Server Express,还是Microsoft SQL Server 2000/2005,都要注意创建用户所需的密码是一个半强类型化的密码。在通过ASP.NET Web Site Administration工具创建用户时,这是非常明显的,如图15-2所示。

在这个屏幕上尝试输入一个密码,但屏幕提示,该密码不满足要求。密码的最小长度是7个字符,而且其中至少有一个非数字和字母的字符。也就是说,需要输入像“Buubles!”这样的密码。这类行为是由成员提供程序指定的,不是由成员系统中使用的控件或API指定的。该要求的定义在C:\WINDOWS\Microsoft .NET\Framework\v2.0.50727\CONFIG下的machine.config.comments文件中。这个定义如程序清单15-1所示。

图  15-2

程序清单15-1  SqlMembershipProvider实例声明

<configuration>

<system.web>

<membership defaultProvider="AspNetSqlMembershipProvider"

userIsOnlineTimeWindow="15" hashAlgorithmType="" >

<providers>

<clear />

<add connectionStringName="LocalSqlServer"

enablePasswordRetrieval="false"

enablePasswordReset="true"

requiresQuestionAndAnswer="true"

applicationName="/"

requiresUniqueEmail="false"

passwordFormat="Hashed"

maxInvalidPasswordAttempts="5"

minRequiredPasswordLength="7"

minRequiredNonalphanumericCharacters="1"

passwordAttemptWindow="10"

passwordStrengthRegularExpression=""

name="AspNetSqlMembershipProvider"

type="System.Web.Security.SqlMembershipProvider,

System.Web, Version=2.0.0.0, Culture=neutral,

PublicKeyToken=b03f5f7f11d50a3a" />

</providers>

</membership>

</system.web>

</configuration>

下面看看这个提供程序的属性,注意minRequiredPasswordLength和minRequired NonalphanumericCharacters属性定义了上述行为。要在服务器上的每个应用程序中改变该行为,只需修改这个文件中的这些值。但建议在各应用程序的web.config文件中修改这些值,如程序清单15-2所示。

程序清单15-2  在web.config文件中修改属性值

<configuration>

<system.web>

   <authentication mode="Forms" />

       <membership>

     <providers>

        <clear />

<add name = "AspNetSqlMembershipProvider"

type = "System.Web.Security.SqlMembershipProvider,

 System.Web, Version=2.0.0.0, Culture = neutral,

PublicKeyToken=b03f5f7f11d50a3a"

connectionStringName = "LocalSqlServer"

enablePasswordRetrieval="false"

enablePasswordReset="true"

requiresQuestionAndAnswer="true"

requiresQuniqueEmail="false"

passwordFormat="Hashed"

maxInvalidPasswordAttempts="5"

minRequiredPasswordLength="4"

minRequiredNomalphanumricCharacters="0"

passwordAttemptWindow="10"/>

     </providers>

   </membership>

</system.web>

</configuration>

在这个例子中,通过minRequiredPasswordLength和minRequiredNonalphanumeric Characters属性改变了密码的要求。密码允许的最小长度是4个字符,且这些字符都是数字或字母(特殊字符包括!、$、#等)。

在应用程序的web.config文件中重新定义提供程序是一个相当简单的过程。在程序清单15-2中,<membership>元素非常类似于machine.config文件中的<membership>元素。

在定义自己的SqlMembershipProvider实例时,有两个选择。一个选择如程序清单15-2所示,重新定义machine.config文件中的SqlMembershipProvider实例(AspNetSqlMembership Provider,其值来自于提供程序声明中的name属性)。如果采用这个选项,就必须清理以前定义的AspNetSqlMembershipProvider实例,在<providers>段中用<clear />节点重新定义AspNetSqlMembershipProvider。否则会抛出一个错误,说明这个提供程序名已经定义过了。

在清理了以前定义的AspNetSqlMembershipProvider实例后,用<add>元素重新定义这个提供程序。在程序清单15-2中,用minRequiredPasswordLength和minRequired Nonalphanumeric Characters属性的新值(显示为黑体)重新定义了密码的要求。

在定义自己的SqlMembershipProvider实例时,另一个选择是为<add>元素中的提供程序指定新的name属性值。如果采用这种方法,就必须使用defaultProvider属性,把这个新命名的实例指定为成员系统的默认提供程序。该方法如程序清单15-3所示。

程序清单15-3  定义自己的SqlMembershipProvider实例

   <membership defaultProvider= "MyVeryOwnAspNetSqlMembershipProvider" >

     <providers>

  <add name = "MyVeryOwnAspNetSqlMembershipProvider"

       type = "System.Web.Security.SqlMembershipProvider,

System.Web, Version=2.0.0.0, Culture = neutral,

PublicKeyToken=b03f5f7f11d50a3a"

connectionStringName = "LocalSqlServer"

enablePasswordRetrieval="false"

enablePasswordReset="true"

requiresQuestionAndAnswer="true"

requiresQuniqueEmail="false"

passwordFormat="Hashed"

maxInvalidPasswordAttempts="5"

minRequiredPasswordLength="4"

minRequiredNomalphanumricCharacters="0"

passwordAttemptWindow="10"/>

     </providers>

   </membership>

在这个例子中,machine.config文件中的SqlMembershipProvider实例(用AspNetSql MembershipProvider名称定义)没有重新定义。而是在web.config文件中定义了一个新名称的实例MyVeryOwnAspNetSqlMembershipProvider。

15.2.2  通过SqlMembershipProvider建立强类型的密码结构

下面介绍如何使密码的结构更复杂。当然,完成这个任务有两种方式。一种是使用前面介绍的minRequiredPasswordLength和minRequiredNonalphanumericCharacters属性,使密码达到需要的长度(较长的密码一般比较安全),并包含指定数量的非数字字母的字符(这也会增加安全性)。

另一种方式是使用passwordStrengthRegularExpression属性。如果minRequiredPassword Length和minRequiredNonalphanumericCharacters属性不能提供需要的密码结构,最好使用passwordStrengthRegularExpression属性。

下面是使用这个属性的一个示例。假定要求用户的密码是他的U.S.社会安全号。因此可以把提供程序定义为如程序清单15-4所示。

程序清单15-4  web.config文件中改变密码结构的提供程序实例

<configuration>

<system.web>

   <authentication mode="Forms" />

      <membership>

     <providers>

        <clear />

<add name = "AspNetSqlMembershipProvider"

type = "System.Web.Security.SqlMembershipProvider,

System.Web, Version=2.0.0.0, Culture = neutral,

PublicKeyToken=b03f5f7f11d50a3a"

connectionStringName = "LocalSqlServer"

enablePasswordRetrieval="false"

enablePasswordReset="true"

requiresQuestionAndAnswer="true"

requiresQuniqueEmail="false"

passwordFormat="Hashed"

maxInvalidPasswordAttempts="5"

passwordAttemptWindow="10"

passwordStrengthRegularExpression="\d{3}-\d{2}-\d{4}" />

     </providers>

   </membership>

</system.web>

</configuration>

这里没有使用minRequiredPasswordLength和minRequiredNonalphanumericCharacters属性,而使用了passwordStrengthRegularExpression属性,其值是\d{3}-\d{2}-\d{4}。这个正则表达式表示,密码应包含3个数字,后跟一个短横线,然后是两个数字、一个短横线,最后是4个数字。

这说明,有许多方式可以修改.NET Framework 2.0默认安装中已有的提供程序的行为。可以调整内置于框架中的许多提供程序,使用基于属性的编程方式,使它们满足自己的要求。SqlMembershipProvider示例就演示了该过程,对其他提供程序也可以进行类似的修改。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论