membership(3)---配置篇

一、概述

       如果按照第二篇的来操作,你会发现membership的配置都是在ASP.NET配置工具中完成的,主要做了三件事情:

1.设置提供程序Provider

2.设置连接字符串ConnectionString

3.设置验证方式,访问规则等

完成之后,查看web.config文件,可以发现多了一些内容:

 <connectionStrings><!--连接字符串-->
    <remove name="OraAspNetConString" />
        <add connectionString="DATA SOURCE=ORCLL;PASSWORD=tiger;PERSIST SECURITY INFO=false;USER ID=SCOTT" name="OraAspNetConString" />
  </connectionStrings>
 <roleManager enabled="true" defaultProvider="OracleRoleProvider" /><!--角色提供程序-->

 <membership defaultProvider="OracleMembershipProvider" /><!--成员资格提供程序-->
 <authentication mode="Forms" ><!--验证方式-->

以上内容其实都可以在web.config文件中进行设置,而且除了连接字符串和角色提供程序,其它的可以更加详细的定制。

二、主要内容

1.设置提供程序 

   角色提供程序OracleRoleProvider很简单,跟配置的效果一样,就不再赘述。这里设置MembershipProvider。

<system.web>
    <membership defaultProvider="OracleMembershipProvider">
<providers>
     <add name="OracleMembershipProvider" 
type="Oracle.Web.Security.OracleMembershipProvider, Oracle.Web, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342"connectionStringName="OraAspNetConString" 
applicationName="" 
enablePasswordRetrieval="false" 
enablePasswordReset="true" 
requiresQuestionAndAnswer="true" 
requiresUniqueEmail="false" 
passwordFormat="Hashed" 
maxInvalidPasswordAttempts="5" 
minRequiredPasswordLength="7" 
minRequiredNonalphanumericCharacters="0" 
passwordAttemptWindow="10" 
passwordStrengthRegularExpression=""/>
  </providers>
    </membership>

    上面使用defaultProvider属性指明本网站使用哪个配置。
       上面的结点可以在machine.config中找到,在C:\WINDOWS\Microsoft.NET\Framework\版本号\CONFIG\machine.config这个文件,找到system.web节点下的membership节点,将OracleMembershipProvider部分复制到我们新建网站的web.config中的system.web节点中修改就可以了。       

        下面是主要的几个属性的含义:

      name:数据提供程序的名称。

      type:数据提供程序类型。

      connectionStringName:该属性必须指定在<connectionStrings>节点中,一个连接字符串的名字。

      applicationName:应用程序名称,membership允许多个应用程序共同使用一个数据库来管理自己的用户、角色信息,各应用程序只需配置不同的applicationName即可,当然,如果想要多个应用程序使用同一份用户角色信息,只需设置一样的applicationName即可。

      requiresUniqueEmail:顾名思义,用户注册时,是否需要提供未注册过的邮箱。

      passwordFormat:密码存储格式,密码保存在数据库中的格式,最常用的有Clear(不加密)和Hashed(使用SHA1算法加密)
      minRequiredPasswordLength:最小密码长度。

      minRequiredNonalphanumericCharacters:指定有效密码中必须包含的特殊字符的最小数量,就是说不是字母也不是数字的字符的数量,比如+-*/,.什么的,增加密码强度。这个一般设为0即可。    

2.设置连接字符串

在web.config的configuration-connectionStings下面添加刚才注册数据库的连接字符串:

    <connectionStrings>
        <remove name="OraAspNetConString" />
        <add connectionString="DATA SOURCE=ORCLL;PASSWORD=tiger;PERSIST SECURITY INFO=false;USER ID=SCOTT" name="OraAspNetConString" />
  </connectionStrings>

3.配置验证方式
配置Forms身份验证:

< system.web >
  
< authentication  mode ="Forms" >
    
< forms  loginUrl ="Login.aspx"
           protection
="All"
           timeout
="30"
           name
=".ASPXAUTH"  
           path
="/"
           slidingExpiration
="true"
           defaultUrl
="default.aspx"
           cookieless
="UseDeviceProfile" />
  
</ authentication >
</ system.web >

    需要说明一下的是LoginUrlDefaultUrl属性:LoginUrl指向登录页面,当ASP.NET判断出该用户请求的资源不允许匿名访问,而该用户未登录时,ASP.NET会自动跳转到LoginUrl所指向的页面,当登录成功后,则跳转回原来请求的页面。DefaultUrl指向默认页面。当我们直接访问登录页面,并登录成功后,这时ASP.NET会跳转到DefaultUrl指向的页面。其他的选项不写都可以,因为有默认值。其它属性的具体含义可以参考MSDN。

        sitemap结合角色管理提供授权服务(番外篇):

         ASP.NET配置工具还可以创建用户,角色和配置访问规则,其中访问规则同样可以在web.config中进行配置,规模不大的web应用可以采用这种做法,具体做法可以参考以下链接:http://www.cnblogs.com/xlb2000/archive/2010/05/12/1733514.html,里面讲解了基于用户和基于角色两种授权方式的配置,可以做到目录一级和页面一级的访问控制。当页面很多时,这种做法就不可取了。我们这里采用的方式是和sitemap结合起来提供授权服务,好处是可以轻松的做到基于角色的页面一级的访问控制,并且扩展型很好。具体做法如下:

       1.在Web服务器上安装Oracle ODAC,在Oracle数据库中运行ODAC的aspnet的脚本,并在该Web服务器上配置machine.config中的OraAspNetConString连接字符串。如果注册了membership机制,这一步就已经做了。
       2.在web.config文件的system.web节中增加:

 <siteMap defaultProvider="MY_OracleSiteMapProvider">
     <providers>
        <clear/>
        <add name="MY_OracleSiteMapProvider" type="myOracleSiteMapProvider" securityTrimmingEnabled="true" connectionStringName="OraAspNetConString" applicationName="/WebSite3" />
     </providers>
    </siteMap>
     说明:
      (1)、connectionStringName="OraAspNetConString"使用的是之前建好的连接字符串。
      (2)、 applicationName="/WebSite3
"中的值,应与ORA_ASPNET_APPLICATIONS表中的APPLICATIONNAME字段的值一致。
     (3)、
type="myOracleSiteMapProvider"中的值,是需要自己继承OracleSiteMapProvider并实现的类。
     (4)、把页面中的SiteMapDataSource控件的SieMapProvider设置为:MY_OracleSiteMapProvider

      这样就设置好了sitemap的提供程序。当然,这现在还是个空架子,需要自己继承OracleSiteMapProvider,并实现IsAccessibleToUser方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using Oracle.Web.SiteMap; // 手动添加,需将Oracle.Web.dll添加至bin目录中!


public class myOracleSiteMapProvider : OracleSiteMapProvider
{ 
   public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node)
    {
      //If Security Trimming is not enabled return true 
      if (!SecurityTrimmingEnabled)
        return true;
     //该节点的没有定义roles定义时,则为 (node.Roles == null || node.Roles.Count == 0)的情形,表示任何用户(含匿名用户)均可访问
     if (node.Roles == null || node.Roles.Count == 0)
       return true; 
    //检查角色 
    foreach (string role in node.Roles) 
     { 
       if (Roles.IsUserInRole(role))
         return true;
     }
   // 视对roles=*理解为是否含匿名用户而取舍,如果认为roles=* 包括匿名用户,则注释到下面1条语句(if (context.User.Identity.IsAuthenticated)) // 一般认为roles=* 不包括匿名用户,role=空 则包括匿名用户。
   if (context.User.Identity.IsAuthenticated)
     foreach (string role in node.Roles)
      {
        if (String.Equals(role, "*", StringComparison.InvariantCultureIgnoreCase))
        return true;
      }
    return false; 
    }
}

</pre><p></p><pre>
这样sitemapProvider的配置就算完成了,可以在页面中使用menu,treeview等控件,并实现访问控制。

     以上是sitemap与web.config关于授权的不同做法,这里sitemap的用法与平时的用法也不同。平时都是使用sitemap文件作为数据源,menu,treeview使用sitemapdatasource作为中间层与sitemap通信。这里使用的是Oracle中的sitemap表作为数据源,并自己实现了SitemapProvider提供程序。menu,treeview使用sitemapdatasource作为中间层,通过SitemapProvider与数据库进行通信,如图所示:



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值