后台页面访问权限:页面基类&内置票据认证 使用方法

一般网站后台页面除了登录页面login.aspx未登录用户可访问外,其它页面必须登录用户才可访问,

当用户未登录时进入某个页面则自动判断并跳转到登录页面:

(如果login.aspx页面用到图片及Css、Js文件,那么也必须允许未登录用户可访问Images、Css、Js文件夹)

 

方法一:运用页面基类BasePage.cs

1、BasePage.cs代码:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/*
  * 创建人:余泳彬
  * 创建时间:2011-1-17 11:13:32
  * 说明:页面基类
  * 版权所有:余泳彬
  */
using System;
using System.Collections.Generic;
using System.Web;
 
namespace Common
{
     /// <summary>页面基类</summary>
     public class BasePage : System.Web.UI.Page
     {
 
         /// <summary>
         /// 应用程序路径 如:/YongbinWeb/ 或 /
         /// </summary>
         public string ApplicationPath
         {
             get
             {
                 string path = HttpContext.Current.Request.ApplicationPath.ToString();
                 if (path.Trim() != "/" ) // 判断路径是否为“/”
                 {
                     path += "/" ;
                 }
                 return path;
             }
         }
 
 
         /// <summary>
         /// 重写页面预处理事件(在页面初始化开始时引发)
         /// 验证用户是否登录
         /// </summary>
         protected override void OnPreInit(EventArgs e)
         {
             //判断会员是否登录,若未登录则跳转到登陆页面
             if (Session[ "admin" ] == null )
             {
                 this .Response.Redirect(ApplicationPath + "/admin/login.aspx" , true );
                 return ;
             }
             base .OnPreInit(e);
         }
 
     }
}

 

2、后台需设置权限的页面.aspx.cs代码(继承BasePage类即可):

1
2
3
4
5
6
7
public partial class admin_ad_edit : BasePage
{
     protected void Page_Load( object sender, EventArgs e)
     {
 
      }
}

  

  方法二:运用.Net内置票据认证 

1、  在根目录建立一个全局应用程序类Global.asax文件,拷入一段代码: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
protected void Application_AuthenticateRequest( object sender, EventArgs e)
         {
             // .Net 内置票据认证代码
             if (HttpContext.Current.User != null )
             {
                 if (HttpContext.Current.User.Identity.IsAuthenticated)  // 验证过的一般用户才能进行角色验证 
                 {
                     if (HttpContext.Current.User.Identity is FormsIdentity)
                     {
                         FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
                         FormsAuthenticationTicket tiecket = id.Ticket;  // 取得身份验证票 
                         string userData = tiecket.UserData;    // 从UserData中恢复role信息
                         string [] roles = userData.Split( ',' );       // 将角色数据转成字符串数组,得到相关的角色信息
                         HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id, roles);  // 这样当前用户就拥有角色信息了
                     }
                 }
             }
 
         }

2、  web.config 文件中配置目录权限及登录页  

A、登录页,在system.web节点中

1
2
3
4
5
6
7
8
<!--
     票据认证配置:登陆页。
     通过 <authentication> 节可以配置 ASP.NET 用来
     识别进入用户的安全身份验证模式。
-->
<authentication mode= "Forms" >
     <forms name= "mycook" loginUrl= "Admin/login.aspx" protection= "All" path= "/" />
</authentication>


注:其中 Admin/login.aspx为若未登录则跳转的目标页面,这里跳转到登陆页

B、配置目录权限,在system.web节点外面  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!--票据认证配置:目录访问权限-->
<location path= "Admin" >
     <system.web>
         <authorization>
             <allow roles= "admin" />   <!--允许指定admin角色用户可访问-->
             <deny users= "*" />          <!-- 禁止所有非指定访问用户的访问-->
         </authorization>
     </system.web>
</location>
<!--所有用户均可访问登录页面-->
<location path= "Admin/login.aspx" >
     <system.web>
         <authorization>
             <allow users= "*" />
         </authorization>
     </system.web>
</location>
<!--所有用户均可访问skin文件夹(css,images文件)-->
<location path= "Admin/skin" >
     <system.web>
         <authorization>
             <allow users= "*" />
         </authorization>
     </system.web>
</location>


 

3、  在登录页的登录事件中的登录成功后拷入一段代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//  登陆事件
protected void btnLogin_Click( object sender, ImageClickEventArgs e)
{
     string name = txtName.Text.Trim();  // 用户名
     string pwd = txtPassWord.Text.Trim();  // 密码
     if (name == "yongbin" && pwd == "123456" )
     {
         // 登录成功,内置票据认证拷入代码
         HttpCookie cook;
         string strReturnURL;  // 登录成功后返回的URL
         string roles = "admin" ; // 用户角色
         // 建立身份验证票对象
         FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
             1, name, DateTime.Now, DateTime.Now.AddMinutes(30), false , roles);
         cook = new HttpCookie( "mycook" );
         cook.Value = FormsAuthentication.Encrypt(ticket);
         Response.Cookies.Add(cook);
         strReturnURL = Request.Params[ "ReturnUrl" ];
         if (strReturnURL != null )
         {
             Response.Redirect(strReturnURL);
         }
         else
         {
             Response.Redirect( "Default.aspx" );
         }
 
     }
}

 

注:其中的url参数ReturnUrl为未登录时浏览的页面,

比如,用户未登录便浏览Admin目录下的 link_list.aspx页面,那么就自动跳转到登陆页面login.aspx,

这时候地址栏显示的URL形式是:http://localhost:2017/Admin/login.aspx?ReturnUrl=%2fAdmin%2flink_list.aspx

如果登陆后,我们要取得登陆的用户名可以这样取得,如:litUserName.Text = User.Identity.Name;

 

到这里,.Net基本的票据验证就成功了! 

另外:如果我们的网站是有两个文件夹需要分别用到票据认证,那怎么办呢?

比如后台的页面Admin目录,以及前台的会员中心页面User目录,因为这两个目录所用的登录页面不一样,所以就不能用同一个票据认证了;

 可修改如下:

1、修改web.config文件

A、修改<authentication>节点:

1
2
3
4
5
6
<authentication mode= "Forms" >
     <!--后台Admin目录权限-->
     <!--<forms name= "mycook" loginUrl= "Admin/login.aspx" protection= "All" path= "/" />-->
     <!--跳转到login_direct.aspx,在login_direct.aspx页面判断是从Admin目录还是User目录中的页面点进来的-->
     <forms name= "mycook" loginUrl= "login_direct.aspx" protection= "All" path= "/" />
</authentication>

 

B、增加User目录权限控制:

1
2
3
4
5
6
7
8
9
<!--票据认证配置:前台User目录访问权限-->
<location path= "User" >
     <system.web>
         <authorization>
             <allow roles= "user" />
             <deny users= "*" />
         </authorization>
     </system.web>
</location>

   

2、建立login_direct.aspx页面,用于判断用户是从Admin目录还是User目录中的页面点击进来的,并跳转到相应目录页面,

login_direct.aspx.cs代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace Yongbin.Shop.Web
{
     public partial class login_direct : System.Web.UI.Page
     {
         protected void Page_Load( object sender, EventArgs e)
         {
             if (!IsPostBack)
             {
                 string strReturnURL = Request.Params[ "ReturnUrl" ];
                 if (strReturnURL != null && strReturnURL.Contains( "Admin" )) //Admin目录
                 {
                     Response.Redirect( "Admin/login.aspx?ReturnUrl=" +strReturnURL);
                 }
                 else
                 {
                     Response.Redirect( "Index.aspx?ReturnUrl=" + strReturnURL);
                 }
             }
         }
     }
}

 

注:如果URL中的ReturnUrl参数含有Admin说明是从后台的Admin目录中跳转过来的,否则是从前台的User目录跳转过来的,这里前台的登陆框放在首页,因此User目录页面自动跳转到首页

3、前台的登录功能代码和后台一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// 登陆
protected void lbtnLogin_Click( object sender, EventArgs e)
{
     string name = txtName.Text.Trim();
     string pwd = txtPwd.Text.Trim();
     if (name.Length == 0 || pwd.Length == 0)
     {
         Yongbin.Shop.Utility.WebHelper.Alert( this , "请填写用户名和密码" );
         return ;
     }
 
     bool b = new Yongbin.Shop.DAL.UserDAO().Login(name, pwd);
     if (b)
     {
         // 登录成功,内置票据认证拷入代码
         HttpCookie cook;
         string strReturnURL;  // 登录成功后返回的URL
         string roles = "user" ; // 用户角色
         // 建立身份验证票对象
         FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
             1, name, DateTime.Now, DateTime.Now.AddMinutes(30), false , roles);
         cook = new HttpCookie( "mycook" );
         cook.Value = FormsAuthentication.Encrypt(ticket);
         Response.Cookies.Add(cook);
         strReturnURL = Request.Params[ "ReturnUrl" ];
         if (strReturnURL != null && strReturnURL.Contains( ".aspx" ))
         {
             Response.Redirect(strReturnURL);
         }
         else
         {
             Response.Redirect( "Index.aspx" );
         }
 
     }
     else
     {
         Yongbin.Shop.Utility.WebHelper.Alert( this , "用户名或密码错误" );
         return
     }
}

  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值