IHttpHandlerFactory的运用(权限控制)

本文介绍如何使用IHttpHandlerFactory接口实现基于角色的权限控制。通过自定义MyHttpHandle抽象类并实现IHttpHandlerFactory接口,可以在ASP.NET应用程序中对特定页面进行访问控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IHttpHandlerFactory在asp.net中算是用处比较多的啦。它能够在Handel对象生成前对当前页面的Handel进行预处理。
下面我就用IHttpHandlerFactory来实现我的权限控制(基于角色)
先贴 代码:
Code
 1using System;
 2using System.Web;
 3using System.Web.UI;
 4using System.Collections.Generic;
 5
 6namespace Ants.HttpBase
 7{
 8    public abstract class MyHttpHandle:IHttpHandlerFactory
 9    {
10        private  string[] roles;
11
12        protected  string[] Roles
13        {
14            get return roles; }
15            set { roles = value; }
16        }

17        public MyHttpHandle()
18        {
19            Creat();
20        }

21        IHttpHandlerFactory 成员#region IHttpHandlerFactory 成员
22
23        public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
24        {
25            if (Roles.Length == 0)//如果角色属性没有的话,抛出异常
26            throw new Exception("初始化属性时失败!请联系 Ants"); }
27            PageHandlerFactory factory = (PageHandlerFactory)Activator.CreateInstance(typeof(PageHandlerFactory), true);
28            IHttpHandler handler = factory.GetHandler(context, requestType, url, pathTranslated);//获取当前的Hander
29            Execute(handler);//执行验证方法
30            return handler;//返回处理过后的Hander
31        }

32
33        private void Execute(IHttpHandler handler)
34        {
35            if (handler is Page)
36            {
37                List<bool> result = new List<bool>();
38                foreach (string tmp in Roles)
39                {
40                    result.Add(((Page)handler).User.IsInRole(tmp));
41                }

42              if(!result.Contains(true))//如果角色没有被允许
43                {
44                    ((Page)handler).PreLoad += new EventHandler(MyHttpHandle_PreLoad);
45                }
               
46            }

47            ((Page)handler).LoadComplete += new EventHandler(MyHttpHandle_LoadComplete);
48
49        }

50
51        void MyHttpHandle_LoadComplete(object sender, EventArgs e)
52        {
53            ((Page)sender).Title += " - Ants  " ;
54        }

55        void MyHttpHandle_PreLoad(object sender, EventArgs e)
56        {
57            Extent(); //没有被允许访问的角色执行此虚方法
58        }
 
59        public void ReleaseHandler(IHttpHandler handler)
60        {
61            
62        }

63        protected  abstract void Creat();
64        protected virtual void Extent()
65        {
66           System.Web.HttpContext.Current .Response.Redirect("~/error.aspx");
67        }

68        #endregion

69    }

70}

我们新建了一个名为MyHttpHandle 的抽象类,此类用来实现我们的IHttpHandlerFactory接口。
属性:Roles是我们要传进来的角色组
MyHttpHandle的初始函数中,我们定义了一个Creat()的抽象方法。子类需通过此方法给Roles属性赋值
Execute 方法为功能实现的主体。

我们再定义一个类(MyTest),继承这个抽象类,
然后在配制文件<httpHandlers>节点下加入或修改下面的地方
<add verb="*" path="member/*/*.aspx" type="MyTest"/>
path为我们要验证的文件路径。


转载于:https://www.cnblogs.com/leleroyn/archive/2008/06/11/1217432.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值