没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|其它|编辑:郝浩|2009-07-31 10:46:40.000|阅读 701 次
概述:此前本想在网上找找实现Asp.Net的IP地址屏蔽功能的文章来参考,但是一搜索“IP 屏蔽 asp.net”,出现的全都是:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
此前本想在网上找找实现Asp.Net的IP地址屏蔽功能的文章来参考,但是一搜索“IP 屏蔽 asp.net”,出现的全都是:
这些都是对我此前写的《细说Asp.net的IP地址屏蔽功能设计》一文的无情转载,不仅不保留出处、作者,而且连标题都没一个与我原文相同的~~
这篇文章写的是程序设计部分,并没有编程实现屏蔽功能,搜索引擎上翻了几页也没找到个正经写这方面的文章,无奈只好自己来研究实现,并写下此文的续篇了,倒是没什么难度。
本文将介绍通过实现IHttpModule接口,进行判断和屏蔽IP地址的方法。
(HttoModule的基础知识可以参阅这里:http://www.tracefact.net/Asp-Net/Introduction-to-Http-Module.aspx)
阅读前请先参阅《细说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地址屏蔽功能设计》一文中提供的实体类方法。
蓝色高亮区域:辅助方法,其代码见下文:
此方法用于获取IP地址。
此方法用于从数据库中读取有效的IP地址屏蔽数据,并将其装入缓存。
缓存时间设置为固定3分钟。
至此,过滤类就实现了。
接下来还需要向Web.Config文件中注册此HttpModule处理程序:
这样就全部完成了。
屏蔽测试:
添加IP屏蔽数据后3分钟内(依据缓存时间设置),被屏蔽的访问者继续浏览网站就会出现这样的提示了。
源代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
namespace MySite
{
public class IPFilter : IHttpModule
{
void context_AcquireRequestState(object sender, EventArgs e)
{
var c = (sender as HttpApplication).Context;
if (c.Session == null) return;
IPAddress ip = null;
if (c.Session["IP"] == null)
{
c.Session["IP"] = ip = IPAddress.Parse(获取客户端IP地址(c));
}
else ip = c.Session["IP"] as IPAddress;
if (c.Cache["IPFilter"] == null) 更新IP屏蔽列表缓存();
var l = c.Cache["IPFilter"] as List<IP地址屏蔽>;
foreach (var f in l)
{
if (f.检测是否被屏蔽(ip))
{
c.Response.Close();
break;
}
}
}
void 更新IP屏蔽列表缓存()
{
using (var c = new DatabaseEntities())
{
var iplist = c.IP地址屏蔽.Where(f => f.过期时间 > DateTime.Now).ToList();
HttpContext.Current.Cache.Insert("IPFilter",
iplist,
null,
DateTime.Now.AddMinutes(3),
System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.AboveNormal,
null);
}
}
/// <summary>
/// 获得当前页面客户端的IP
/// </summary>
public static string 获取客户端IP地址(HttpContext c)
{
string result = String.Empty;
result = c.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if (string.IsNullOrEmpty(result))
{
result = c.Request.ServerVariables["REMOTE_ADDR"];
}
if (string.IsNullOrEmpty(result))
{
result = c.Request.UserHostAddress;
}
if (string.IsNullOrEmpty(result))
{
return "0.0.0.0";
}
return result;
}
#region IHttpModule 成员
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
}
#endregion
}
}
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
文章转载自:博客园面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号