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

  在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应用程序的输出缓冲是如何设置的。

 

posted @   雲霏霏  阅读(1366)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示