Asp.net下使用HttpModule模拟Filter,实现权限控制

简介:   在asp.net中,我们为了防止用户直接从Url中访问指定的页面而绕过登录验证,需要给每个页面加上验证,或者是在模板页中加上验证。如果说项目比较大的话,添加验证是一件令人抓狂的事情,本次,我就跟大家分享一个利用HttpModule实现权限验证的方法。

  在asp.net中,我们为了防止用户直接从Url中访问指定的页面而绕过登录验证,需要给每个页面加上验证,或者是在模板页中加上验证。如果说项目比较大的话,添加验证是一件令人抓狂的事情,本次,我就跟大家分享一个利用HttpModule实现权限验证的方法。

第一步:

在项目中新建一个类.cs文件,本例为Filter,应用一下命名空间,主要是为了访问Session。

using System.Web.SessionState;

第二步:让这个类继承IHttpModel和IRequiresSessionState接口,代码如下:

public class Filter : IHttpModule, IRequiresSessionState
{
}

第三步:实现Ihttpmodel接口的一下两个方法:

public void Dispose()
{
            
}
public void Init(HttpApplication context)
{
}

第四步:编写方法context_AcquireRequestState,实现权限的认证,代码如下:

void context_AcquireRequestState(object sender, EventArgs e)
        {

            HttpApplication application = (HttpApplication)sender;
            HttpContext context = application.Context;
            
            try
            {
                string path = context.Request.Path;
                if (context.Session != null && context.Session["User"] == null )
                {
                    context.Response.Redirect("~/Default.aspx");
                }

            }
            catch (Exception)
            {
                context.Response.Write("系统出现错误,请稍后访问......");
            }

        }

第五步:注册AcquireRequestState方法:

public void Init(HttpApplication context)
        {
            context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
        }

至此,这个权限认证就完成啦~~

注意事项:不能使用BeginRequest这个方法,BeginRequest方法无法访问Session,会出现错误。具体为什么,还请高手解释。

HttpModel的事件及执行顺序如下:

        AcquireRequestState 当ASP.NET运行时准备好接收当前HTTP请求的对话状态的时候引发这个事件。
        AuthenticateRequest 当ASP.NET 运行时准备验证用户身份的时候引发这个事件。
        AuthorizeRequest 当ASP.NET运行时准备授权用户访问资源的时候引发这个事件。
        BeginRequest 当ASP.NET运行时接收到新的HTTP请求的时候引发这个事件。
        Disposed 当ASP.NET完成HTTP请求的处理过程时引发这个事件。
        EndRequest 把响应内容发送到客户端之前引发这个事件。
        Error 在处理HTTP请求的过程中出现未处理异常的时候引发这个事件。
        PostRequestHandlerExecute 在HTTP处理程序结束执行的时候引发这个事件。
        PreRequestHandlerExecute 在ASP.NET开始执行HTTP请求的处理程序之前引发这个事件。在这个事件之后,ASP.NET 把该请求转发给适当的HTTP处理程序。
        PreSendRequestContent 在ASP.NET把响应内容发送到客户端之前引发这个事件。这个事件允许我们在内容到达客户端之前改变响应内容。我们可以使用这个事件给页面输出添加用于所有页面的内容。例如通用菜单、头信息或脚信息。
        PreSendRequestHeaders 在ASP.NET把HTTP响应头信息发送给客户端之前引发这个事件。在头信息到达客户端之前,这个事件允许我们改变它的内容。我们可以使用这个事件在头信息中添加cookie和自定义数据。
        ReleaseRequestState 当ASP.NET结束所搜有的请求处理程序执行的时候引发这个事件。
        ResolveRequestCache 我们引发这个事件来决定是否可以使用从输出缓冲返回的内容来结束请求。这依赖于Web应用程序的输出缓冲时怎样设置的。
        UpdateRequestCache 当ASP.NET完成了当前的HTTP请求的处理,并且输出内容已经准备好添加给输出缓冲的时候,引发这个事件。这依赖于Web应用程序的输出缓冲是如何设置的。

 

目录
相关文章
|
存储 开发框架 安全
ASP.NET Core 中间件的使用(三):全局异常处理机制(Filter拦截器对比)
ASP.NET Core 中间件的使用(三):全局异常处理机制(Filter拦截器对比)
|
开发框架 缓存 JSON
ASP.NET Core MVC 从入门到精通之Filter
ASP.NET Core MVC 从入门到精通之Filter
188 0
|
开发框架 前端开发 .NET
ASP.NET Core 十八.各种Filter的内部处理机制及执行顺序(上)
ASP.NET core 的Filter是系统中经常用到的,本文详细分享一下各种Filter定义、执行的内部机制以及执行顺序。
234 0
ASP.NET Core 十八.各种Filter的内部处理机制及执行顺序(上)
|
开发框架 .NET 中间件
ASP.NET Core 十八.各种Filter的内部处理机制及执行顺序(下)
ASP.NET core 的Filter是系统中经常用到的,本文详细分享一下各种Filter定义、执行的内部机制以及执行顺序。
329 0
|
前端开发 .NET 数据安全/隐私保护
|
.NET 容器 开发框架
深入理解asp.net里的HttpModule机制
转自http://jeffwongishandsome.cnblogs.com/ 1、asp.net的HTTP请求处理过程说明:(1)、客户端浏览器向服务器发出一个http请求,此请求会被inetinfo.exe进程截获,然后转交给aspnet_isapi.dll进程,接着它又通过Http Pipeline的管道,传送给aspnet_wp.exe这个进程,接下来就到了.net framework的HttpRunTime处理中心,处理完毕后就发送给用户浏览器。
1123 0