java限制ip登陆次数_手把手教你自定义IP访问次数限制器

本文介绍了如何使用Java自定义IP访问次数限制器,通过监听器和过滤器来统计并限制用户IP的访问次数,防止恶意刷新。核心代码包括过滤器IPFilter和监听器MyListener,实现IP访问次数超过阈值后限制其访问,并设置解禁时间。
摘要由CSDN通过智能技术生成

修订版已经发布:请看完这篇文章后再去看修订版

前段时间弄爬虫的时候,在爬iteye的时候碰到过一个场景,Spider跑几次或者抓取的时间间隔小一点之后就会出现401错误

16-08-16 15:05:49,687 INFO us.codecraft.webmagic.Spider(Spider.java:307) ## Spider 843977358.iteye.com started!

16-08-16 15:05:49,696 INFO us.codecraft.webmagic.downloader.HttpClientDownloader(HttpClientDownloader.java:87) ## downloading page http://843977358.iteye.com/

16-08-16 15:05:50,056 WARN us.codecraft.webmagic.downloader.HttpClientDownloader(HttpClientDownloader.java:100) ## code error 401 http://843977358.iteye.com/

AAffA0nNPuCLAAAAAElFTkSuQmCC

不用想,一定是人家后台给限制住了。

因此,自己就瞎鼓捣搞了一个简单点的,仅仅可以实现对用户IP次数的检查和对违规用户的封禁

用到的技术

过滤器(Filter):统计用户访问次数,记录访问时间、封禁时间

监听器(Listener):工程运行时初始化IP存储器(此处用的Map)

我的思路:

工程启动时,创建两个Map,一个(ipMap)用来存放用户Ip和访问时间等主要信息,另一个(limitedIpMap)用来存放被限制的用户IP。Map的key为用户的IP,value为具体内容。

当用户访问系统时,通过IPFilter检查limitedIpMap中是否存在当前IP,如果存在说明该IP之前存在过恶意刷新访问,已经被限制,跳转到异常提示页面;如果limitedIpMap

中不存在则检查ipMap中是否存在当前IP,如果ipMap中不存在则说明用户初次访问,用户访问次数+1,初始访问时间为当前时间;如果存在则检查用户访问次数是否在规定的短时间内进行了大量的访问操作;如果是,则将当前IP添加到limitedIpMap中,并跳转到异常提示页面,否则不进行操作,直接放行本次请求。

AAffA0nNPuCLAAAAAElFTkSuQmCC

(简单画了下流程图,看不懂的就脑补吧,脑补吧,补吧,吧...)

AAffA0nNPuCLAAAAAElFTkSuQmCC

配置文件:

IPFilter

com.test.interceptor.IPFilter

IPFilter

/render/*

com.test.listener.MyListener

监听器MyListener:

import java.util.HashMap;

import java.util.Map;

import javax.servlet.ServletContext;

import javax.servlet.ServletContextEvent;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值