Hello World!

常见的 HttpModule

在 ASP.NET 中,已经预定义了许多HttpModule,甚至已经在服务器的网站配置文件中进行了注册,在系统文件夹 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config 中,web.config 文件中已经注册了 14 个 HttpModule。

  1. <httpModules> 
  2.     <add name="OutputCache" 
  3.     type="System.Web.Caching.OutputCacheModule" /> 
  4.     <add name="Session" 
  5.     type="System.Web.SessionState.SessionStateModule" /> 
  6.     <add name="WindowsAuthentication" 
  7.     type="System.Web.Security.WindowsAuthenticationModule" /> 
  8.     <add name="FormsAuthentication" 
  9.     type="System.Web.Security.FormsAuthenticationModule" /> 
  10.     <add name="PassportAuthentication" 
  11.     type="System.Web.Security.PassportAuthenticationModule" /> 
  12.     <add name="RoleManager" 
  13.     type="System.Web.Security.RoleManagerModule" /> 
  14.     <add name="UrlAuthorization" 
  15.     type="System.Web.Security.UrlAuthorizationModule" /> 
  16.     <add name="FileAuthorization" 
  17.     type="System.Web.Security.FileAuthorizationModule" /> 
  18.     <add name="AnonymousIdentification" 
  19.     type="System.Web.Security.AnonymousIdentificationModule" /> 
  20.     <add name="Profile" 
  21.     type="System.Web.Profile.ProfileModule" /> 
  22.     <add name="ErrorHandlerModule" 
  23.     type="System.Web.Mobile.ErrorHandlerModule, 
    System.Web.Mobile, 
    Version=4.0.0.0,  
  24.         Culture=neutralPublicKeyToken=b03f5f7f11d50a3a/> 
  25.     <add name="ServiceModel" 
  26.     type="System.ServiceModel.Activation.HttpModule, System.ServiceModel.  
  27.         Activation,Version=4.0.0.0, Culture=neutral,  
  28.         PublicKeyToken=31bf3856ad364e35/> 
  29.     <add name="UrlRoutingModule-4.0" 
  30.     type="System.Web.Routing.UrlRoutingModule" /> 
  31.     <add name="ScriptModule-4.0" 
  32.     type="System.Web.Handlers.ScriptModule, System.Web.
    Extensions, 
    Version=4.0.0.0,  
  33.         Culture=neutralPublicKeyToken=31bf3856ad364e35"/> 
  34. </httpModules> 

主要的HttpModule的解释如下:

OutputCacheMudole 完成ASP.NET的输出缓存管理工作。

OutputCacheMudole的配置参数通过system.web配置元素的caching子元素的 outputCache元素进行定义。当启用输出缓存之后,OutputCacheMudole 将注册 HttpApplication 的ResolveRequestCache 和 UpdateRequestCache 两个事件完成输出缓存的管理。

SessionStateModule 完成 Session 的管理工作。

这个 Module 的配置参数通过配置文件中的 system.web 配置元素的 sessionState 子元素进行配置。当启用 Session 状态管理之后,SessionStateModule 将注册 HttpApplication 的AcquireRequestState、ReleaseRequestState、EndRequest三个事件完成 Session 状态的管理工作。

ProfileModule 在 .NET 2.0 之后,提供个性化数据管理。

这是一个自定义的类似于 Session 的会话状态管理,但是,个性化数据的读取和保存可以由程序员完全控制,并且提供了强类型的数据访问方式。这个 Module 的配置参数在 system.web 的子元素 profile 中进行说明。当启用了个性化数据管理之后,Module 将注册 HttpApplicaiton 的 AcquireRequestState 和EndRequest 事件处理。

AnonymousIdentificationModule 提供匿名用户的标识。

是否启用匿名用户标识在配置文件的system.web配置元素的子元素 anonymousIdentification 中定义,还可以配置匿名标识的管理方式。由于在 AuthenticateRequest 事件中将验证用户,获取用户名,所以,这个 Module 注册了 PostAuthenticateRequest 的事件处理,当用户没有经过验证的时候,为用户分配一个唯一的匿名标识。

WindowsAuthenticationModule、FormsAuthenticationModule和PassportAuthenticationModule用来完成用户的验证工作。

它们通过配置文件中 system.web 的子元素 authentication 子元素定义,mode 属性用来指定网站当前使用的验证方式,也就是哪一个 Module 将被用来完成验证工作。在启用验证的情况下,FormsAuthenticationModule 和 PassportAuthenticationModule将注册 HttpApplication 的AuthenticateRequest 和 EndRequest 事件进行用户的验证处理。 WindowsAuthenticationModule 将注册 AuthenticateRequest 的事件处理。

RoleManagerModule、UrlAuthorizationModule、FileAuthorizationModule 用来完成用户的授权管理。

授权管理的配置参数来自 system.web 的 authorization 子元素。UrlAuthorizationModule 和 FileAuthorizationModule 注册了 HttpApplication 的 AuthorizeRequest 事件处理,用来检查 Url 和 文件的访问授权。RoleManagerModule 在 Url 和 文件访问授权检查通过之后,通过用户的标识和角色来完成用户的授权检查,RoleManagerModule 注册了 HttpApplication 的 PostAuthenticateRequest 和 EndRequest 事件处理。

 

对一个网站来说,ASP.NET提供的有些HttpMoudle可能并不是需要的, 然而,如果你不去手工禁用它们,它们其实会一直运行。
比如 我 会禁用下面这些HttpMoudle:

<httpModules>
    <remove name="Session"/>
    <remove name="RoleManager"/>
    <remove name="PassportAuthentication"/>
    <remove name="Profile"/>
    <remove name="ServiceModel"/>
</httpModules>
对于使用Forms身份认证的网站的来说,下面这些HttpModule也是可以禁用的:

<httpModules>
    <remove name="WindowsAuthentication"/>
    <remove name="FileAuthorization"/>
</httpModules>
posted @ 2013-05-23 09:59  世界万物  阅读(339)  评论(0编辑  收藏  举报
Bye World!