前几天客户(政府部门)打电话过来说系统被百度收录,并且可以不登录就能访问其中的某些页面。
急急忙忙赶过去解决问题。(中间还有小插曲:打的过去的,由于跨了几个区,结果的哥也不认识路,哎呦折腾的天都黑了,路费狂飙……)
这个系统是公司最老的系统之一,是好几年前的,开发那个乱啊,维护着就心烦。
一到那边就被客户训了,说这个怎么回事,问题很大,XX领导都发话了……(一大堆*****)
还好咱习惯了,解决问题才是目的。
页面被百度抓取了,其实就是百度能访问这个页面,也就是未验证的用户也可访问。
问题已经很明显出在哪里啦,可问题是不知道多少页面没有验证。
当然也就想到了写一个HttpHandler,来注册页面事件验证用户。
Ok,马上就动手写。
public class ValidateHttpHandlerFactory : IHttpHandlerFactory, IReadOnlySessionState { #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) { } #endregion void page_Init(object sender, EventArgs e) { //这里来验证访问用户的合法性
//Session
//需要排除登录页面
}
}
由于系统中是使用Session保存用户信息,所以在这里要访问Session需要继承IReadOnlySessionState接口。
如果还要写Session就需要继承IRequiresSessionState接口。
然后在web.config里面配置。
<httpHandlers> <add path="*.aspx" verb="*" type="Hxj.Web.HttpHandlerFactory.ValidateHttpHandlerFactory,Hxj.Web.HttpHandlerFactory"/> </httpHandlers>
这样就可以接管aspx页面,并且注册了Init 事件,来验证用户。
问题自然也就解决啦。
作者:steven hu
出处:http://www.cnblogs.com/huxj
MSN: cn_huxj@hotmail.com
交流QQ群:60831381
版权声明:欢迎任何网络媒体和网站转载本人博客的内容,只需注明作者和主博客文章地址的链接。另有约定者除外。
此声明随时可能修改,不另行通知。
出处:http://www.cnblogs.com/huxj
MSN: cn_huxj@hotmail.com
交流QQ群:60831381
版权声明:欢迎任何网络媒体和网站转载本人博客的内容,只需注明作者和主博客文章地址的链接。另有约定者除外。
此声明随时可能修改,不另行通知。
评论快速通道: