HOWTO:使ASP.NET网站Forms验证可以指定多个登录页面

网站结构如下:
    /default.aspx
    /login.aspx
    /adminlogin.aspx
    /member/*.aspx
    /admin/*.aspx

需求:访问/member/路径下的页面的请求转向到/login.aspx;
             访问/admin/路径下的页面的请求被转向到/adminlogin.aspx;

一开始,自己假想在/Web.config中作如下配置可以达到目的:

< system.web >
    
< authentication  mode ="Forms" >
        
< forms  loginUrl ="/Login.aspx"  name =".ASPXFORMSAUTH" >
        
</ forms >
    
</ authentication >
</ system.web >
< location  path ="member" >
    
< system.web >
        
< authorization >
            
< deny  users ="?" />
        
</ authorization >
    
</ system.web >
</ location >
< location  path ="admin" >
    
< system.web >
        
< authentication  mode ="Forms" >
            
< forms  loginUrl ="/AdminLogin.aspx"  name =".ASPXFORMSAUTH" >
            
</ forms >
        
</ authentication >
        
< authorization >
            
< deny  users ="?" />
        
</ authorization >
    
</ system.web >
</ location >

 

但很快发现,这样会导致一个运行时错误:

在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的

Google了几下,遇到同样错误的不少,但问题相似的不多。于是临时采用了一种变通的做法(急于解决问题,可能有良好的/更好的解决方案)。两个步骤:

1. 定义/LoginHandler.ashx。在ProcessRequest方法中,



    
if  ( ! HttpContext.Current.User.Identity.IsAuthenticated) {
                    
string loginUrl;
                    
string returnUrl = context.Request.Params["returnUrl"];

                    
if(returnUrl.Contains("/Admin/")) {
                        loginUrl 
= "/AdminLogin.aspx";
                    }

                    
else{
                        loginUrl 
= "/Public/Login.aspx";
                    }


                    
if (!string.IsNullOrEmpty(context.Request.Params["returnUrl"])){
                        loginUrl 
= loginUrl + "?returnUrl=" + HttpUtility.UrlEncode(context.Request.Params["returnUrl"]);
                    }

                    context.Response.Redirect(loginUrl);
    }

2. 配置/Web.config,

< system.web >
    
< authentication  mode ="Forms" >
        
< forms  loginUrl ="/LoginHandler.ashx"  name =".ASPXFORMSAUTH" >
        
</ forms >
    
</ authentication >
</ system.web >
< location  path ="LoginHandler.ashx" >
    
< system.web >
        
< httpHandlers >
            
< add  verb ="*"  path ="LoginHandler.ashx"  type ="Web.LoginHandler"  validate ="true"   />
        
</ httpHandlers >
    
</ system.web >
</ location >
< location  path ="member" >
    
< system.web >
        
< authorization >
            
< deny  users ="?" />
        
</ authorization >
    
</ system.web >
</ location >
< location  path ="admin" >
    
< system.web >
        
< authorization >
            
< deny  users ="?" />
        
</ authorization >
    
</ system.web >
</ location >

 

转载于:https://www.cnblogs.com/yicone/archive/2008/05/22/1204431.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值