`
shirlly
  • 浏览: 1657729 次
  • 性别: Icon_minigender_2
  • 来自: 福州
社区版块
存档分类
最新评论

HttpModule实现简单权限限制访问

    博客分类:
  • .NET
阅读更多
"权限限制访问"几乎每个程序员在做系统时都会用到。就我而言会用一下三种方法来实现:

写一个权限管理函数,在每个代码隐藏文件中的Page_Load函数中调用。这种方法很低级,代码量很大,如果系统很大的化,那简直就是一场灾难。
撰写一个继承System.Web.UI.Page 基类的BasePage类,然后再 BasePage类继承的OnInit 方法中填写权限管理的代码。然后在系统的每个代码隐藏文件中的Page类继承BasePage类就OK了。使用这种方法虽然能够有效的解决代码重用问题,但是想想如果忘了让Page累继承BasePage类,那将会变成系统安全的一个漏洞......
用HttpModule来实现"权限限制访问"相对简单多了,也可以有效解决以上问题,以下是自己写的代码示例(VS2005),请路过的朋友不要见笑,并提出宝贵意见。
文件->添加新项目->Visual C#->类库 
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using DataControl;

namespace HM
{
    public class UserControl : IHttpModule
    {

        #region IHttpModule

        public void Dispose()
        {

        }

        public void Init(HttpApplication context)
        {
              context.BeginRequest += new System.EventHandler(httpApplication_BeginRequest);
              
        }

        #endregion

        #region Registered event handlers
        public void httpApplication_BeginRequest(object sender, EventArgs e)
        {
            HttpApplication httpApplication = (HttpApplication)sender;


            HttpCookie UserCookie = httpApplication.Context.Request.Cookies["UserCookie"];


            //如果用户未登录就跳转到登录界面
            if (UserCookie == null)
            {

                httpApplication.Context.Response.Redirect("/Portal/ProtalLogin.aspx");

            }

            //根据当前路径取得用户权限
            DataTable dt = Authority.GetAuthorityByUserAndPath(UserCookie["UserID"], httpApplication.Context.Request.RawUrl);
            if (dt.Rows.Count == 1)
            {
                UserCookie["ISVIEW"] = dt.Rows[0]["ISVIEW"].ToString();
                UserCookie["ISADD"] = dt.Rows[0]["ISADD"].ToString();
                UserCookie["ISUPDATE"] = dt.Rows[0]["ISUPDATE"].ToString();
                UserCookie["ISDELETE"] = dt.Rows[0]["ISDELETE"].ToString();
                UserCookie["ISCONFIRM"] = dt.Rows[0]["ISCONFIRM"].ToString();

            }
            else
            {
                UserCookie["ISVIEW"] = "0";
                UserCookie["ISADD"] = "0";
                UserCookie["ISUPDATE"] = "0";
                UserCookie["ISDELETE"] = "0";
                UserCookie["ISCONFIRM"] = "0";

            }
        }


        #endregion
      
       if (UserCookie["ISVIEW"].ToString().Equals("0"))
            {

                httpApplication.Context.Response.Redirect("/Portal/ProtalLogin.aspx");

            }

    }
}


文件->添加新项目->Visual C#->类库:(将控件修改为能够自动感知权限的控件)
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using DataControl;

namespace DataControl
{
      public class UpdateButton : System.Web.UI.WebControls.Button
    {
               protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            HttpCookie UserCookie = this.Context.Request.Cookies["UserCookie"];
            if (UserCookie != null)
            {
                string IsSave = UserCookie["ISUPDATE"];
                if (IsSave.Equals("1"))
                {
                    this.Enabled = true;

                }
                else
                {
                    this.Enabled = false;

                }

            }
        }
      

    }
}


如何调用权限管控代码(文件->新建网站)
       在Web.Config文件中添加调用代码:
<system.web>
<httpModules>
<add name="UserControl" type="HM.UserControl,SQMSHttpModule"/>
    </httpModules>
</system.web>


在页面中调用自动感知权限的控件:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Defaule.aspx.cs" Inherits="Defaule" %>
<!--注册权限感知控件代码-->
<%@ Register TagPrefix="Authority" Namespace="DataControl" Assembly="DataControl" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div >
    <Authority:UpdateButton ID="btnChange" runat="server" Text="Change The System Description"  />

    </div>
    </form>
</body>
</html>


Notices: 请不要在有登录页的模块中调用HttpModule,否则会在登录页面造成跳转死循环。

转自:http://www.cnblogs.com/xiangxiang/archive/2008/12/26/1363034.html
分享到:
评论

相关推荐

    HttpModule实现同时一人在线.rar

    通过巧妙地使用HttpModule,我们可以精确地控制用户访问权限,实现特定的业务逻辑,例如限制同时在线人数。在实际项目中,务必考虑到性能和扩展性,因为频繁的并发检查可能会带来额外的开销。因此,设计时需要权衡...

    通过HttpModule限制来访IP

    本文将详细讲解如何通过HttpModule来实现IP限制策略,以保护Web应用程序,只允许特定的IP地址访问。 首先,我们需要了解HttpModule的工作原理。HttpModule是IIS(Internet Information Services)中的一个组件,它...

    实现批量下载文件

    验证用户是否有权限下载这些文件,防止非法访问。同时,限制单个用户的并发下载次数,以免服务器压力过大。 7. **性能优化**:为了提高性能,可以考虑使用异步操作,特别是在处理大量文件时。利用ASP.NET的async/...

    Cross-Origin Resource Sharing in ASP.NET WebForms

    跨域资源共享(CORS)是Web应用程序中一种允许浏览器安全...通过设置合适的响应头,开发者可以控制资源的访问权限,既保障了安全性,又满足了跨域通信的需求。在实际开发中,应根据应用的具体需求选择合适的实现方式。

    ASP.NET源码——[论坛社区]中国技术论坛(仿Discuz).zip

    授权则通过Role Manager和Authorization规则实现,限制不同角色用户的访问权限。 六、模板与皮肤 为了实现类似于Discuz的个性化展示,本源码可能使用了模板和皮肤系统。ASP.NET中的Master Page可以创建页面布局模板...

    ASP.NET娱乐网站源代码

    在线播放视频可能需要使用流媒体技术,如ASP.NET中的HttpHandler或者HttpModule,配合Flash、HTML5的Video标签或第三方播放器(如JW Player、FlowPlayer)实现。 在线收费模块通常与会员系统结合,实现用户注册、...

    ASP.NET-[图片动画]致远美女图片管理系统(zystudiommcms).zip

    ASP.NET的身份验证服务可以支持多种验证模式,如Windows、Forms、Passport等,而角色管理则可以限制不同用户对资源的访问权限。 【用户体验优化】 考虑到图片加载速度,系统可能会采用延迟加载、图片预加载或CDN...

    ASP.NET环境下为网站增加IP过滤功能第1/2页

    在ASP.NET环境中,为网站添加IP过滤功能是一项重要的安全措施,尤其是对于那些需要限制特定用户访问权限的企业网站。本教程主要针对一个基于Asp.Net 2.0实现的网站,其目标是实现对厂内和厂外用户访问权限的有效控制...

    asp.net项目开发实践

    通过Windows身份验证、Forms身份验证或其他认证方式,可以限制只有经过验证的用户才能访问特定资源。同时,角色管理和权限控制进一步细化了访问控制。 在实际开发中,还会涉及异常处理、日志记录、性能优化等技术。...

    Url重写篇视频------本讲将通过实例比较ASP.NET下的三种典型URL重写方案

    但是,却无法检测非ASP.NET支持的文件扩展名的链接(我们固然可以在IIS中将所有类型的扩展名都映射到ASP.NET解析器,但是,如果我们有设置IIS的权限,为什么还要用性能更低,限制更多的ASP.NET方式的URL重写,而不...

    ASP.NET源码——[上传下载]达达电子书下载系统(生成shtml)版.zip

    3. **下载控制**:为了防止盗链和滥用,系统可能会采用下载权限控制,如限制非注册用户的下载次数,或者设置会员等级来解锁更多下载权限。 4. **sHTML生成**:ASP.NET通过HttpHandler或HttpModule组件,可以在用户...

    一个优秀的ASP.NET(及WinForm)开发人员需要知道

    在 FullTrust 环境下,GAC 程序集可以访问所有受限制的功能,这对于某些高权限的操作非常关键。 **3.6 获取 GAC 中特定程序集的信息** 使用 gacutil 命令可以查询 GAC 中的程序集信息,例如使用 gacutil /l | find...

    (ASP.Net)第三波书店

    - **授权**:通过角色或用户基础的权限管理,限制访问特定资源。 - **防止XSS和CSRF**:使用验证控件和HttpModule防止跨站脚本攻击和跨站请求伪造。 - **加密和解密**:对敏感数据进行加密存储,保证信息安全。 ...

    shooting-game

    通过角色管理和权限控制,可以限制不同用户对游戏资源的访问,确保游戏环境的公平性。 最后,射击游戏的多人在线同步是挑战之一。ASP.NET的 SignalR 库提供了实时双向通信功能,能有效解决延迟问题,使玩家间的交互...

    2.ASP.NET.2.0.高级编程(第4版) [1/7]

    6.3.2 指定正确的ASP.NET权限给上传文件 172 6.3.3 理解文件大小的限制 173 6.3.4 把上传的文件放在Stream对象中 174 6.3.5 把文件内容从Stream对象移动到Byte数组中 175 6.4 MultiView和View服务器控件 175 ...

    ASP.NET2.0高级编程(第4版)1/6

     18.6.1 IP地址和域名限制640  18.6.2 使用文件扩展名641  18.6.3 使用新的  ASP.NET MMC插件643 18.7 小结644 第19章 状态管理645 19.1 如何选择645 19.2 ASP.NET 2.0中的  Session对象648  19.2.1 会话和...

Global site tag (gtag.js) - Google Analytics