ASP.NET Forms 权限验证

ASP.NET 的Forms权限验证,就是通过 web.config配置来改变每个用户的不同文件夹访问权限。例如,A,B,C用户属于USERS组,配置A,B,C三个用户只能访问W目录下的页面。具体配置如下:

1) 建立站点根目录下web.config,authentication 节点的mode设置为Forms。

 

<? xml version = " 1.0 " ?>
< configuration >
    
< appSettings />
    
< connectionStrings />
    
< system.web >
        
< authentication mode = " Forms " >
            
< forms name = " test "  protection = " All "  timeout = " 30 "  loginUrl = " ~/Login.aspx "  defaultUrl = " ~/ "  slidingExpiration = " true " />
        
</ authentication >
        
< compilation debug = " true " />
    
</ system.web >
</ configuration >

 

 

2) 站点目录下建立W文件夹,添加配置文件web.config,W文件夹下新建test.aspx页面。

 

<? xml version = " 1.0 "  encoding = " utf-8 " ?>
< configuration >
    
< appSettings />
    
< connectionStrings />
    
< system.web >
        
< authorization >
            
< allow roles = " USERS " /> <!--只要登录用户就可以访问roles="?"-->
            
< deny users = " * " />
        
</ authorization >
    
</ system.web >
</ configuration >

 

 

3) 根目录下新建登录页面(login.aspx),登录按钮事件代码:

 

FormsAuthenticationTicket _ticket  =   new  FormsAuthenticationTicket( 0 " test " , DateTime.Now, DateTime.Now.AddMinutes( 20 ),  false " USERS " );
string  encryptedTicket  =  FormsAuthentication.Encrypt(_ticket);
HttpCookie authCookie 
=   new  HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
Response.Cookies.Add(authCookie);
if  (String.IsNullOrEmpty(Request.QueryString[ " ReturnUrl " ]))
{
    Response.Redirect(FormsAuthentication.DefaultUrl);
}
else
{
    Response.Redirect(Request.QueryString[
" ReturnUrl " ]);
}

 

 

4) 站点根目录新建global.asax,在文件中加入Application_AuthenticateRequest事件,该事件将在安全模块建立起当前用户的有效的身份时被触发。

 

void  Application_AuthenticateRequest( object  sender, EventArgs e)
{
    
string  cookieName  =  FormsAuthentication.FormsCookieName;
    HttpCookie authCookie 
=  Context.Request.Cookies[cookieName];
    FormsAuthenticationTicket authTicket 
=   null ;
    
try
    {
        authTicket 
=  FormsAuthentication.Decrypt(authCookie.Value);
    }
    
catch  (Exception ex)
    {
        
return ;
    }

    
string [] roles  =  authTicket.UserData.Split( new   char [] {  ' , '  });

    FormsIdentity id 
=   new  FormsIdentity(authTicket);

    System.Security.Principal.GenericPrincipal principal 
=   new  System.Security.Principal.GenericPrincipal(id, roles);
    Context.User 
=  principal;
}

 

 

当访问W目录下的test.aspx页面时就需要登录,当登录的用户属于USER组时,就有权限访问,否则无权限访问。 

 

 

转载于:https://www.cnblogs.com/pirlo/archive/2010/12/15/1906734.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值