系统登录统一验证

前几天发现系统中某些页面被搜索收录,并且可以不登录就能访问其中的某些页面。当然也就想到了写一个HttpHandler,来注册页面事件验证用户。

马上开工………

1.创建一个类实现IHttpHandlerFactory接口;如果登录信息是保存在Session中的话还需要实现IReadOnlySessionState接口
    public class ValidateHttpHandlerFactory : IHttpHandlerFactory, IReadOnlySessionState
    {
    }

2.实现IHttpHandlerFactory接口的方法;
   IHttpHandlerFactory接口包含两个方法需要实现GetHandler()和ReleaseHandler();

 #region IHttpHandlerFactory 成员
public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
{
  PageHandlerFactory _Factory = (PageHandlerFactory)Activator.CreateInstance(typeof(PageHandlerFactory), true);
  IHttpHandler _Handler = _Factory.GetHandler(context, requestType, url, pathTranslated);
  Page _Page = _Handler as Page;
  if (_Page != null)
  {  
    _Page.Init += new EventHandler(Page_Init);
  }
  return _Handler;
}
public void ReleaseHandler(IHttpHandler handler)
{
}
/// <summary>
/// 页面初始化事件委托
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void Page_Init(object sender, EventArgs e)
{
  //需要排除登录页面
  //..........
  //需要验证登录的页面
  Page _Container = sender as Page;
  if (_Container != null)
  {
    //此例是将用户登录信息保存在Cookie中
    if (_Container.Request.Cookies["userinfo"] == null)
    {
      _Container.Response.Redirect("Error.html");
    }
  }
}
#endregion
3.增加web.config配置信息
     < httpHandlers >
        
< add  path ="*.aspx"  verb ="*"  type ="WebApplication2.ValidateHttpHandlerFactory,WebApplication2" />
    
</ httpHandlers >

一切OK,这样就可以接管aspx页面,并且注册了Init 事件,来验证用户。Error.html是一个错误提示页面,由于代码比较简单这里就不提供代码的下载了。
通过验证的效果图:
image

未能通过验证的页面效果图:
image
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值