【原创】自定义Membership,KSPMembership发布,支持多数据库(mysql/oracle/sqlserver)
Membership相信大家都不陌生,Membership是微软在.NET 2.0时代推出的一套用户管理工具,问题在于微软官方的Membership仅仅是对SqlServer制作的,如果你的系统需要使用Mysql或者是Oracle就不好办了,虽然有些别的Membership能支持Mysql或者Oracle的,但是还没有一个集成到一起的。
经历了这么多项目之后,有的项目用的是SqlServer,有的项目用的是Oracle,还有的项目用的是Mysql,而这些MIS项目基本上都用到了Membership,所以才会想到做一个同时支持多数据库的Membership,而且这个Membership和微软官方的一样,都是标准的Membership,你原来的代码不用做任何更改就可以使用。
下面先介绍一下这个项目的基本思路:
1、 自定义的Membership需要从MembershipProvider 类继承,MembershipProvider类是一个抽象类,一般只要实现了这些类中的方法就可以完成自己的Membership,我的这个自定义的Membership叫KSPMembership。
2、 多数据库的支持是在自定义的Membership中进行分层,调用能支持多数据库的DAL即可。这里面使用了Ibatis.net来支持多数据库。
3、 微软自带的Membership数据库中有不少表,分析之后里面有些表没啥用,这里Membership相关的一共就4张表,Application(应用程序表),Role(角色表),User(用户表),UserInRole(用户对应角色表)
下面看看具体如何使用,以ASP.NET MVC2,MySql 举例:
1、 执行建表的SQL语句,将这4张表建立起来,SQL语句在附件组件包中。
2、 打开VS2008,建立一个ASP.NET MVC2 工程(MVC1 也一样),将组件包中所有DLL文件都COPY到BIN目录下。
3、 修改Web.Config文件,
A、 在<appSettings>节点下增加:
<appSettings>
<add key="KSPDBType" value="oracle"/>
<add key="KSPAPPName" value="MoleCart"/>
</appSettings>
说明:KSPDBType 是表示你的数据库类型,可以是 mysql/oracle/sqlserver 中的任意一个字符串,不区分大小写;KSPAPPName 是表示你的应用程序名称。
B、 在<connectionStrings>节点下增加:
<connectionStrings>
<add name="KSPDB" connectionString="server=127.0.0.1;database=kingsiteshop;user id=root;password=;charset=utf8"/>
</connectionStrings>
说明:这个数据库连接是为Membership准备的。注意 KSPDB 是写死的,不能改变
C、 在<system.web>节点下修改增加:
代码<membership defaultProvider="KSPMembershipProvider"
userIsOnlineTimeWindow="15">
<providers>
<clear />
<add
name="KSPMembershipProvider"
type="KingSite.Purview.KSPMembershipProvider,KingSite.Purview"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="true"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
writeExceptionsToEventLog="true"
/>
</providers>
</membership>
<roleManager enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES"
defaultProvider="KSPRoleProvider">
<providers>
<clear />
<add autogenerateschema="true" writeExceptionsToEventLog="true"
name="KSPRoleProvider" type="KingSite.Purview.KSPRoleProvider,KingSite.Purview" />
</providers>
</roleManager>
4、 完成后在VS2008 中先编译MVC网站项目,然后选中你的ASP.NET MVC 项目,然后点击 项目菜单-》ASP.NET 配置,打开VS自带的网站配置网页。
5、 如果一切正常你就会看到下图。
6、 恭喜你,自定义Membership可以工作了,你可以通过修改配置文件中的KSPDBType节点来修改数据库类型,很方便吧,不同的项目就可以配置为不同的数据库了。
7、KSPMembership在c# 3.5,Mysql 5.1,Oralce 10g,SqlServer 2008 测试通过。