好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

URL过滤

URL过滤

ASP.NET的URL过滤

 

最近做的一个Web项目需要对URL进行过滤,在网上搜了一下,知道J2EE有个Filter的东西,而在.NET方面,其实也可以实现。

下面是类的定义。

  1   using   System;
   2   using   System.Web;
   3   using   System.Web.SessionState;
   4  
  5   namespace   QTJZ
   6   {
   7       public   class   Filters : IHttpModule, IRequiresSessionState
   8       {
   9           public   void   Dispose() { }
  10  
 11           public   void   Init(HttpApplication application)
  12           {
  13              application.AcquireRequestState +=  new   EventHandler(application_AcquireRequestState);
  14           }
  15  
 16           public   void  application_AcquireRequestState( object   sender, EventArgs e)
  17           {
  18              HttpApplication application = sender  as   HttpApplication;
  19              HttpRequest request =  application.Request;
  20              HttpResponse response =  application.Response;
  21  
 22               string  url=request.CurrentExecutionFilePath.Trim( '  /  '  );
  23               string  suffix = request.CurrentExecutionFilePathExtension.Trim( '  .  '  );
  24  
 25               if  (!url.Equals( "  Default.htm  " ) && (suffix ==  "  aspx  "  || suffix ==  "  htm  "  ))
  26               {
  27                   object  sessionObj = application.Context.Session ==  null  ?  null  : application.Session[ "  useID  "  ];
  28                   if  (sessionObj== null  )
  29                   {
  30                      response.Redirect( "  ~/Default.htm  "  );
  31                   }
  32               }
  33           }
  34       }
  35  }

为了实现过滤的效果,Filters类需要实现IHttpMoeld接口,实现该接口需要有两个方法,一个是Dispose,另一个是Init。Init的参数是一个HttpApplication类型的实例,利用这个实例注册一些事件。由于现在要对URL进行过滤,因此注册的是AcquireRequestState事件。类似事件罗列如下

BeginRequest 在 ASP.NET 响应请求时作为 HTTP 执行管线链中的第一个事件发生。 AuthenticateRequest 当安全模块已建立用户标识时发生。 AuthorizeRequest 当安全模块已验证用户授权时发生。 ResolveRequestCache

在 ASP.NET 完成授权事件以使缓存模块从缓存中为请求提供服务后发生,

从而绕过事件处理程序(例如某个页或 XML Web services)的执行。

AcquireRequestState 当 ASP.NET 获取与当前请求关联的当前状态(如会话状态)时发生。 PreRequestHandlerExecute 恰好在 ASP.NET 开始执行事件处理程序(例如,某页或某个 XML Web services)前发生。 PostRequestHandlerExecute 在 ASP.NET 事件处理程序(例如,某页或某个 XML Web service)执行完毕时发生。 ReleaseRequestState 在 ASP.NET 执行完所有请求事件处理程序后发生。 该事件将使状态模块保存当前状态数据。 UpdateRequestCache 当 ASP.NET 执行完事件处理程序以使缓存模块存储将用于从缓存为后续请求提供服务的响应时发生。 EndRequest 在 ASP.NET 响应请求时作为 HTTP 执行管线链中的最后一个事件发生。

获取要跳转的url可以用request的CurrentExecutionFilePath属性,而获取请求文件的后缀可以用CurrentExecutionFilePathExtension,至于要按什么规则来判断,按需求而定。我这里是在请求时判断Session是否存在,不存在则跳转回登陆页面。由于要用到Session,打开页面的时候会抛出异常,异常信息是“会话状态在此上下文中不可用。”,在实现了IRequiresSessionState接口之后就没有异常抛出了。

 

 

分类:  C#

作者: Leo_wl

    

出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于URL过滤的详细内容...

  阅读:46次