系统登录统一验证
2010-05-23 21:46 Kevin-wang 阅读(504) 评论(0) 编辑 收藏 举报前几天发现系统中某些页面被搜索收录,并且可以不登录就能访问其中的某些页面。当然也就想到了写一个HttpHandler,来注册页面事件验证用户。
马上开工………
1.创建一个类实现IHttpHandlerFactory接口;如果登录信息是保存在Session中的话还需要实现IReadOnlySessionState接口
public class ValidateHttpHandlerFactory : IHttpHandlerFactory, 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>
<add path="*.aspx" verb="*" type="WebApplication2.ValidateHttpHandlerFactory,WebApplication2"/>
</httpHandlers>
一切OK,这样就可以接管aspx页面,并且注册了Init 事件,来验证用户。Error.html是一个错误提示页面,由于代码比较简单这里就不提供代码的下载了。
通过验证的效果图:
未能通过验证的页面效果图:
OK,完成。