同一IPの一定期間のアクセス数を制限する
1318 ワード
この方式は簡単で乱暴です...プロジェクトの中でメールを送る機能があって、ウェブサイトがユーザーに暴露する1つのフィードバックの意見のメールの入り口で、redisあるいは漏斗あるいは平滑な限流を使わないためです.単純で乱暴な限流であり、実際の状況に応じて使用する.
private CopyOnWriteArrayList> ipList = new CopyOnWriteArrayList<>();
@RequestMapping(value = "/sendMsg.jspx")
public void sendMsg(HttpServletRequest request,HttpServletResponse response) throws JSONException {
try {
//
String userIp = request.getRemoteAddr();
ConcurrentHashMap ipMap = new ConcurrentHashMap<>();
if(ipList!=null && !ipList.isEmpty()){
for(ConcurrentHashMap myMap : ipList) {
if(myMap.get(userIp) != null) {
// IP 3
if(System.currentTimeMillis() - myMap.get(userIp) < 3 * 1000){
myMap.put(userIp,System.currentTimeMillis());
ResponseUtils.renderJson(response, " !");
}
}
}
if(ipList.size()==10) {
// 10
ipList.clear();
}
}
ipMap.put(userIp,System.currentTimeMillis());
ipList.add(ipMap);
// --
sendEmail.sendEmil();
ResponseUtils.renderJson(response, " !");
} catch (NumberFormatException e) {
ResponseUtils.renderJson(response, " !");
e.printStackTrace();
}
}