背景
前几天为公司的登陆写密码校验,因为是老系统的东西了,数据已经存在了,所以我要知道密码的校验规则是啥,然后业务经理告诉我了是用Membership去做的加密,让我自己去看。之后我又去问了技术经理,这一块当时做加密是他做的,他告诉了我老项目的位置,让我去获取了看看,然后说了需要配置那些东西。至于membership这个东西,网上一搜也是一大片,都很详细,我重点也不是说这个,因为题目也明确说了是Initialise这个方法,下面是我自己做的简单例子说明。
正文
首先我创建了自己的Provider类,建立自己的类要去继承 MembershipProvider 或者是 SqlMembershipProvider,SqlMembershipProvider也是继承了 MembershipProvider 。继承后,会提示需要引用某个dll,那么需要的是就是 System.Configruation and System.Web.ApplicationServices 的引用。我们需要做的就是重写 Initialize 方法,当然还有很多校验获取用户,创建用户根据业务我们都是需要去做重写的。
public class MyMembership : SqlMembershipProvider
{
public override void Initialize(string name, NameValueCollection config)
{
var en = config[""];
base.Initialize(name, config);
}
}
接下来添加我们的配置文件
<system.web>
<membership defaultProvider ="MyMembership">
<providers>
<add name ="MyMembership" type="MembershipTest.MyMembership,MembershipTest " connectionStringName="yourConnectionStr"
enablePasswordRetrieval="false"
enablePasswordReset =" true"
requiresQuestionAndAnswer="false"
requiresUniqueEmail =" false"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength =" 6" m
inRequiredNonalphanumericCharacters =" 0"
passwordAttemptWindow= "10 " applicationName="/" />
</providers>
</membership>
</system.web>
配置节点中的type一定是我们自己的provider类的全名,还有就是defaultProvider节点名字要和providers中的 name 一致,基本网上一搜全都是,直接拿过来改改就可以。接下来就是我们调用了,怎么调用当时我就在这个地方弄了半天,因为调试 Initialize方法的时候,断点怎么都不进来,我不停地在网上搜着,但是没有一个告诉我答案的,我也看到了一些像我一样的同胞在问这个问题。
bool isResult = Membership.ValidateUser("a", "b");
Console.WriteLine(isResult);
Console.ReadKey();
大家看到了,我是用Membership这个静态类去调用的方法,其实想想因为我们配置文件就是配置的这个类节点,通过这个类与我们自己的Provider形成了一个映射关系,那么我们在调用Membership中的方法的时候,第一步就是去调用了 Initialize ,这也是我们要做初始化的地方。那么我们再调用Membership中的方法时候其实就是走的我们的Provider中的方法,当然这些方法在Mebership中也是同名的,在我们继承的Provider基类中都有,而我们是在我们自己的provider中重写了一些,从而为了实现我们自己的业务代码逻辑。只是做一个小小的发现,还望大牛们多多指点。。。。。。