ASP.NET使用HttpModule实现IP地址屏蔽功能(源码)
阅读前请先参阅《细说Asp.net的IP地址屏蔽功能设计》一文,本文将使用这篇文章中提出的思路,并将使用文中创建的数据库、实体类。
首先,新建一个类,名为IPFilter,继承自IHttpModule接口:
实现IHttpModule接口,并为context对象的AcquireRequestState事件添加事件处理:
(因为我们要用到Session,而在早于AcquireRequestState的事件中Session还未被初始化。参考于:http://www.cnblogs.com/junqilian/archive/2008/03/07/1095454.html)
事件处理方法:
这里的主要功能是从Session中读取用户IP,再从缓存中读取IP地址屏蔽列表,遍历IP地址屏蔽数据,判断是否应当屏蔽当前IP,如果判断为屏蔽,就关闭输出,让客户端无法访问。
黄色高亮区域:这里是在判断Session是否为空,其原因是不能保证执行到这里时Session总是存在的,我曾在有异步访问的页面中遇到过这里报错的情况,所以这样处理比较稳妥。
绿色高亮区域:这是在《细说Asp.net的IP地址屏蔽功能设计》一文中提供的实体类方法。
蓝色高亮区域:辅助方法,其代码见下文: