一个较完整的关键字过滤解决方案(中)
问题远没结束 上面的问题解决了没有?哦哦,我是指采取命名约定的方式来改变过滤行为。当然有问题 ,不过我这里提一下比较重要的两个: 首先,就是“改名”这种行为——究竟是否方便?还记得我们的需求吗(提示一下:方便 、通用……)?如果采取上面的命名约定方案,我们可能就需要在页面的前端和后端都不断 地改名,一会儿加-noffw,一会儿加-json。如果项目只由您来负责这还好办,只是麻烦一些 ,但是如果您的团队中的前台开发人员性格古怪,固执己见,不愿配合怎么办(打架我喜欢 ,可惜不能直接解决问题)?再者,假如您除了一个FilterForbiddenWordModule之外还有类 似的“FilterScriptInjectionModule”怎么办(别真写这么一个HttpModule,不合适,老赵 只是想不出一个恰当的例子了)?如果两个Module都采取命名约定的方式,那么如何制定一 个两者能同时认同的约定就也是个麻烦事。 再者,命名真是我们可以控制的吗?某些情况下好说,但是假如您在使用WebForms中的控 件怎么办?WebForm中的一个重要特性就是用过Naming Container来避免客户端ID的冲突。假 设我们的页面是放在一个Master Page中ID为Main的ContentPlaceHolder中,那么ID为 txtPassword的文本框在客户端里生成的HTML便会如下所示——那么我们又能有什么办法可以 做到“命名约定”吗?
嘿,看来这种命名约定的方式有时候真不是那么通用啊。那么我就来设法解决WebForm这 个问题。 其实如果要解决WebForm这个问题,说白了就是要设法可以让服务器端明确指定一些字段 的处理方式。这种“特殊”则意味着对于过滤方式的判断必须与特定的Page——泛化一下, HttpHandler进行绑定。这里我先谈一下我的第一个想法:使用Custom Attribute进行标记的 方式。我们构造一个FilterForbiddenWordAttribute,其中包含一个抽象GetFilterType方法 根据key来指定过滤方式:
我们如果有特别的需求,就可以通过定义一个FilterForbiddenWordHandlerAttribute的 子类,重载GetFilterType方法,然后标记在HttpHandler上。如下:
当然,我们还需要对FilterForbiddenWordModule进行一些修改才能使之生效(朋友们可 以先不要看代码,想想这次改变的关键在哪里?):
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |