利用Forms验证(自定义、角色提供程序、单点登录)登陆

2024-04-27 12:38

本文主要是介绍利用Forms验证(自定义、角色提供程序、单点登录)登陆,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 以前开发项目时经常是自己开发一套用户权限管理系统进行验证,比较灵活。最近为了单点登录的问题又把Asp.Net自带的验证方式看了一遍,发现这种方式也比较方便,功能也还可以。在Asp.Net提供了三种常用的验证方式:Windows方式是和IIS结合起来可以实现基本、摘要、集成 Windows等身份验证;Passport方式是使用Windows Live ID的帐户来进行统一验证的;Forms方式是使用常见的表单来实现验证。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    本文主要就是讨论Forms验证方式普通实现、自定义实现、自定义角色提供程序、如何单点登录(可和MOSS结合)等几个方面。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    一、普通实现方式‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    这种方式是最简单的,只需要配置一下就可以了。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    1、执行aspnet_regsql命令建立数据库‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
aspnet_regsql命令在C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727目录下,按提示运行就可以了‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    2、新建一个web网站‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
在Web.Config中加入配置:‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù

[复制到剪贴板]
CODE:
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
<connectionStrings> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    <add name="MySqlConnection" connectionString="Data Source=dbserver;Initial Catalog=database;user id=userid;password=51aspx;" /> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
  </connectionStrings> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
  <system.web> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <authorization> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
            <deny users="?"/> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        </authorization> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <authentication mode="Forms"> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
            <forms loginUrl="login.aspx" name=".ASPXAUTH"/> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        </authentication> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    <membership defaultProvider="SqlProvider"> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      <providers> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <clear /> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <add connectionStringName="MySqlConnection" applicationName="MyApplication" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
          enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
          requiresUniqueEmail="true" passwordFormat="Hashed" name="SqlProvider" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
          type="System.Web.Security.SqlMembershipProvider" /> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      </providers> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    </membership> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
  </system.web>

‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
主要就是指定Forms验证使用的数据库,如果不指定数据库会使用本机默认的aspnetdb 数据库。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
deny users="?"表示不允许匿名用户访问,也就是说当匿名用户访问时自动跳转到下面配置的login.aspx页面。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
至于authorization和authentication节的其他属性可以参考MSDN,里面有很详细的介绍。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    3、在网站里创建Default.aspx和Login.aspx页面‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    在Login.aspx页面里面放入Login和CreateUserWizard控件(因为我们新建的库中一个用户也没有,CreateUserWizard控件只是用来建立测试用户的,建好用户后可以把这个控件删除)‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
在Default.aspx页面中随便放入一些内容。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
当我们访问Default.aspx时就会自动转入Login.aspx进行验证了。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    二、自定义实现方式‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    采用第一种方式时会要求建立一个数据库,很多表,可能并不符合我们自己的业务要求。可以使用以下的自定义方式‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    1、利用Login控件的Authenticate事件‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
这个事件就是用来进行验证的,可以通过指定true值表示验证通过:‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù

[复制到剪贴板]
CODE:
protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    { ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        //判断用户名密码是否正确 ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        // ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        e.Authenticated = true; ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    }

‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
2、完全抛开Login等控件,自己写代码‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    其实Login控件的核心主要也就是往Cookie里面放入一些值,那么我们可以在自己的代码中来进行这个操作:‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù

[复制到剪贴板]
CODE:
protected void Button1_Click(object sender, EventArgs e) ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    { ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        //判断用户名密码是否正确 ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        //. ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        FormsAuthentication.SetAuthCookie(userName, false); ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        if (Context.Request["ReturnUrl"] != null) ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        { ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
            Response.Redirect(Context.Request["ReturnUrl"]); ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        } ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        else ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        { ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
            Response.Redirect(FormsAuthentication.DefaultUrl); ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        } ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    }

‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
采用以上两种方式就不用建立默认的数据库了,直接使用我们的逻辑进行验证操作‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    三、自定义角色提供程序‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    以上说的都是用户级别的验证,在有的情况下需要根据角色来进行验证,比如指定某个目录或某个aspx文件只能让哪几个角色的用户访问,根据角色来控制的话比较方便灵活。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    1、在登录验证的时候把角色信息也保存到Cookie中去:‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù

[复制到剪贴板]
CODE:
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
protected void Button1_Click(object sender, EventArgs e) ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    { ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        //判断用户名密码是否正确 ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        //. ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        //得到用户的角色,测试时暂时写死 ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        string userRoles = "Admins,testst"; ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        FormsAuthenticationTicket Ticket = new FormsAuthenticationTicket(1, user, DateTime.Now, DateTime.Now.AddMinutes(30), false, userRoles, "/"); ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        string HashTicket = FormsAuthentication.Encrypt(Ticket); ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        //把角色信息保存到Cookie中去 ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        HttpCookie UserCookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashTicket); ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        Response.Cookies.Add(UserCookie); ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        if (Context.Request["ReturnUrl"] != null) ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        { ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
            Response.Redirect(Context.Request["ReturnUrl"]); ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        } ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        else ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        { ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
            Response.Redirect(FormsAuthentication.DefaultUrl); ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        } ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    }

‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
把角色信息加密成特定的格式保存。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    2、自定义角色提供程序‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    如果要按照角色进行验证的话,肯定要涉及到角色提供程序,在默认情况下也是会去连接默认的数据库的,我们可以自己写一个角色提供程序来实现自己的逻辑。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    首先在web.config中加入配置:‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
Code‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù

[复制到剪贴板]
CODE:
<roleManager defaultProvider="MyRoleProvider" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      enabled="true" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cacheRolesInCookie="true" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cookieName=".ASPROLES" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cookieTimeout="30" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cookiePath="/" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cookieRequireSSL="false" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cookieSlidingExpiration="true" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cookieProtection="All" > ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      <providers> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <clear /> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <add name="MyRoleProvider" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
          type="MyRoleProvider" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
          writeExceptionsToEventLog="false" /> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      </providers> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    </roleManager>

‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
这个就是指定我们的角色提供类MyRoleProvider。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    这个类必须从System.Web.Security.RoleProvider继承,只要重载实现一个方法就可以了(其他方法返回异常):‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù

[复制到剪贴板]
CODE:
public override string[] GetRolesForUser(string username) ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    { ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        FormsIdentity Id = HttpContext.Current.User.Identity as FormsIdentity; ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        if (Id != null) ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        { ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
            return Id.Ticket.UserData.Split(new Char[] { ',' }); ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        } ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        return null; ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    }

‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
也就是从我们之前保存到Cookie中的值取得用户角色(FormsAuthentication会自动把保存的cookie转化成User内的值)‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
之后我们就可以在web.config中配置角色验证规则了:‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù

[复制到剪贴板]
CODE:
<location path="admin"> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    <system.web> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      <authorization> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <allow roles="Admins"/> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <deny users="*"/> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      </authorization> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    </system.web> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
  </location>

‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
或者也可以在代码中判断:‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
bool a = User.IsInRole("testt");判断起来还是很方便的。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
  四、单点登录‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    使用Forms的单点登录主要是通过machineKey的配置,machineKey 元素对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
使用这种方式的单点登录目前只能实现相同主机或相同子域站点之间的同步登录,比如www.cnblogs.com和firstyi.cnblogs.com可以实现,但是www.cnblogs.com和www.51aspx.com‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
就不能实现了,对于非同一父域名下的域名间不能跨站登录‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
主要配置如下:‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù

[复制到剪贴板]
CODE:
<machineKey validationKey="282487E295028E59B8F411ACB689CCD6F39DDD21E6055A3EE480424315994760ADF21B580D8587DB675FA02F79167413044E25309CCCDB647174D5B3D0DD9141" decryptionKey="8B6697227CBCA902B1A0925D40FAA00B353F2DF4359D2099" validation="SHA1"/> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
  <authentication mode="Forms"> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      <forms loginUrl="login.aspx" name=".ASPXAUTH1" domain=".cnblogs.com" /> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
  </authentication>

‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
要实现单点登录的多个web站点的machineKey必须一样,forms里面的name和domain也必须一样‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
这样配置好之后,在其中一个站点登录后再调转到另一个站点就不需要再次登录了。‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
注:如果MOSS网站采用Forms验证方式的话,只要把MOSS站点的对应配置改成和自己的Asp.Net站点一致,那么可以从自己的站点直接进入MOSS站点,也不需要重新登录(MOSS站点和自己的站点要有相同的用户名)‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
其他:‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
Forms验证之后可以使用以下方法退出登录:‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
FormsAuthentication.SignOut(); ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
另外这些登录的后台Module是配置在C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/CONFIG/web.config文件中的:‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù

[复制到剪贴板]
CODE:
<add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule"/> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"/> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      <add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule"/>

‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
附:‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
最后的web.config文件‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù

[复制到剪贴板]
CODE:
‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
<?xml version="1.0"?> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
  <system.web> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <authorization> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
            <deny users="?"/> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        </authorization> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <authentication mode="Forms"> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      <forms loginUrl="login.aspx" name=".ASPXAUTH1" domain=".cnblogs.com" /> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    </authentication> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    <machineKey validationKey="F9A61F796A204D9945889B64D9DA5086E89CEC5200F0CED4" decryptionKey="D679BCF2A76DEBB04D7FED5E5967F46C92FEF2B31AD5D7C9" validation="SHA1" /> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    <compilation debug="true"/> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    <roleManager defaultProvider="MyRoleProvider" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      enabled="true" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cacheRolesInCookie="true" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cookieName=".ASPROLES" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cookieTimeout="30" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cookiePath="/" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cookieRequireSSL="false" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cookieSlidingExpiration="true" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      cookieProtection="All" > ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      <providers> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <clear /> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <add name="MyRoleProvider" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
          type="MyRoleProvider" ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
          writeExceptionsToEventLog="false" /> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      </providers> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    </roleManager> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
  </system.web> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
  <location path="admin"> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    <system.web> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      <authorization> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <allow roles="Admins"/> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
        <deny users="*"/> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
      </authorization> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
    </system.web> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
  </location> ‚H™µHóÕØbbs.51aspx.com5 ²<û3¸ù
</configuration>

这篇关于利用Forms验证(自定义、角色提供程序、单点登录)登陆的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940522

相关文章

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

EMLOG程序单页友链和标签增加美化

单页友联效果图: 标签页面效果图: 源码介绍 EMLOG单页友情链接和TAG标签,友链单页文件代码main{width: 58%;是设置宽度 自己把设置成与您的网站宽度一样,如果自适应就填写100%,TAG文件不用修改 安装方法:把Links.php和tag.php上传到网站根目录即可,访问 域名/Links.php、域名/tag.php 所有模板适用,代码就不粘贴出来,已经打