自定义 MembershipProvider 的杂谈。

命名空间:System.Web.Security;

Membership 是 VS DotNET 2005 中内置的一个静态类。它用于对成员资格验证和操作。
它本身不提供对数据直接操作的方法,而是由它的 Provider 来完成。

// Membership 类
// (取自 .Net FrameWork 2.0 内部代码)
private static MembershipProvider s_Provider;

从这里可以看到 Membership 定义了一个局部静态对象 s_Provider,它是 MembershipProvider 类型。

若要实现成员资格提供程序,就必需创建一个继承 MembershipProvider 抽象类的类。
MembershipProvider 抽象类实现的必需的属性和方法,并提供了每个属性和方法的说明。

// 这是 machine.config 配置文件中一段信息

<membership>
  <providers>
    <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"
      applicationName="/"
      requiresUniqueEmail="false"
      passwordFormat="Hashed"
      maxInvalidPasswordAttempts="5"
      minRequiredPasswordLength="7"
      minRequiredNonalphanumericCharacters="1"
      passwordAttemptWindow="10"
      passwordStrengthRegularExpression="" />
  </providers>
</membership>

它指示了 SqlMembershipProvider 类是作为 Membership 中 s_provider 的对象来调用。
因为 Membership 在 Initialize() 是时候会读取此配置信息,并将它实例化。

// Initialize() 方法中的一句代码
// (取自 .Net FrameWork 2.0 内部代码)
Membership.s_Provider = Membership.s_Providers[section1.DefaultProvider];

s_providers 是所有配置文件中的 <providers> 节内部的所有实例。
section1.DefaultProvider 是 <membership> 的 defaultProvider 属性值,
若示未定义就使用内部默认值 AspNetSqlMembershipProvider ,它由特性定义。

// MembershipSection 类中的 DefaultProvider 定义
// (取自 .Net FrameWork 2.0 内部代码)
[ConfigurationProperty("defaultProvider",
 DefaultValue="AspNetSqlMembershipProvider"),
 StringValidator(MinLength=1)]
public string DefaultProvider

至此,会不会明白一点了呢?

// SqlMembershipProvider 定义
// (取自 .Net FrameWork 2.0 内部代码)
public class SqlMembershipProvider : MembershipProvider

从这里可以看到 SqlMembershipProvider 是继承 MembershipProvider 类的.


当如果在我们自己系统中的 Web.Config 中定义了如下节:

<membership defaultProvider="MyProvider" userIsOnlineTimeWindow="15">
  <providers>
    <add
      name="MyProvider"
      type="Eos.Web.Security.MembershipEosProvider"
      connectionStringName="LocalSqlServer"
      enablePasswordRetrieval="true"
      enablePasswordReset="true"
      requiresQuestionAndAnswer="true"
      writeExceptionsToEventLog="true" />
  </providers>
</membership>

// SqlMembershipProvider 定义
// (取自 .Net FrameWork 2.0 内部代码)
public sealed class MembershipEosProvider : MembershipProvider

注意这里定义了 defaultProvider="MyProvider" 是表示 Membership 默认 MyProvider 为 s_Provider 对象。
而 MyProvider 是 Eos.Web.Security.MembershipEosProvider 类。它也继承 MembershipProvider 类。

posted on 2006-07-26 17:28 MaxFree 阅读(929) 评论(1)  编辑 收藏 网摘 所属分类: VS.NET简单随笔

评论

#1楼 2007-03-06 20:46 zahota[未注册用户]

我在MSDN上看到了一个例子,由于VS2005不提供对access数据库的支持,我写了个继承SqlMembershipProvider的类,用于提供对access数据库的支持,并加入了一些其他特性,但调试的时候总不能通过,真是郁闷,   回复  引用    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 460302




相关文章:

相关链接:

导航

<2006年7月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

与我联系

搜索

 

常用链接

留言簿

我参与的团队

随笔分类

随笔档案

其它博客

最新评论

阅读排行榜

评论排行榜