如何界定恶意评论?Roller使用三个变量来判定,分别是:
1、用户的ip;
2、单位时间;
3、单位时间内评论的最大次数;
如果某个ip在单位时间内评论的次数大于指定的值,则将此ip加入黑名单。
实现过程如下:
在Roller中,关于评论处理是通过一个CommentServlet来处理的,CommentServlet在握住一个GenericThrottle对象,CommentServlet初始化时,读入上面所说的两个变量:单位时间和最大评论次数。
GenericThrottle类的作用是创建一个缓存,将每次提交的请求根据ip地址记录一次,并累计和缓存起来。
CommentServlet根据GenericThrottle的累计和处理结果,见ip加到黑名单中。
那么如何将ip加入到黑名单中呢?IPBanList类是做这个工作的。IPBanList在初始化的时候会读入一个配置项,根据此配置项读写一个文本文件。如果这个文件不存在或者不能读,则前面的逻辑都没有效了。
IPBanList有一个添加黑名单的方法和一个判断某个ip是否在黑名单中的方法。
加入某个ip已经被加到黑名单中了,Roller如何来防止这个ip再提交请求呢?IPBanLifter类会拦截所有关于评论的请求,如果这个ip再提交这个过滤器将立即跳到错误页面。
完!