您的位置:首页 > 理论基础 > 计算机网络

HttpModule实现用户身份验证

2012-11-20 17:12 519 查看
(本文资源全部来自于园子里各牛)

之前看jimmyzhang的asp.net运行原理,开篇既说要明白验证就要先看asp.net运行原理,不然用控件就是"微软的用户"了

现在看到这总算反应过来,原来验证是在HttpModule里进行的(目前观点).

首先来看一下HttpModule的生命周期


为了证明这个图,来看一下下面这段代码.


Code

实现了IHttpModule接口.

运行如下:application_BeginRequest

application_AuthenticateRequest

application_AuthorizeRequest

application_ResolveRequestCache

application_AcquireRequestState

application_PreRequestHandlerExecute

application_PostRequestHandlerExecute

application_ReleaseRequestState

application_EndRequest

application_PreSendRequestHeaders

看来确实是如此.

下面就是实现用户验证的简单例子


Code


Code

在webconfig注册完成后,就可以运行看看效果了(页面上的关于session代码肯定再熟悉不过了).

这里两个自定义的HttpModule实现了它们各自所要达到的过滤请求的功能,一个限制用户登录,一个限制模块访问,当然实际应用中比这要复杂许多。这样的验证方式是简单的、安全的,代码在修改时只要修改相应的HttpModule就可以了,无需在每个页面都写相同的验证代码,也不会发生在Url地址栏里输入一段Url就可以跳过登录及其它验证的情况了。在这两个HttpModule中,因为都要涉及到对Session的访问,所有都使用了AcquireRequestState事件

一个完整的HTTP请求在ASP.NET Framework的处理过程如下:

HttpRequest ——> inetinfo.exe ——> ASPNET_ISAPI.dll ——> Http Pipeline ——> ASPNET_WP.exe ——> HttpRuntime ——> HttpApplication Factory ——> HttpApplication ——> HttpModule ——> HttpHandler Factory ——> HttpHandler ——> HttpHandler.ProcessRequest()

HTTP Handler提供了类似于ISAPI Server Extention的功能,而HttpModule实现了类似于ISAPI Filter的功能。使用自定义的Handler会覆盖系统默认的Handler,而Module是可以多个同时存在的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: