環境有限請求:
Java的EE基於web的應用程序限制用戶,使每秒
問題:
需要限制用戶,使超過5(例如) (主要是BOT)
解決方案:
作爲基本設計我打算有2個同步Map
在應用範圍
Map<String, Map<Long, Integer>>
String
是用於請求
Long
SessionId是當前第二表示
Integer
是保持請求數
個
過程:
步驟0:
配置Filter
攔截每個請求
步驟1:
確定地圖 我將會看到,如果當前minute
是奇數,然後我將在mapOne
上添加數據,我將清除mapTwo
步驟2:
過程圖
int requestNoForThisSecond = mapXX.get(request.getSession().getId()).get(currentSecondRepresantationInLong);
if(requestNoForThisSecond <= 5){
requestNoForThisSecond++;
mapXX.get(request.getSession().getId()).put(currentSecondRepresantationInLong, requestNoForThisSecond);
}else{
response.sendRedirect();// redirect to some captcha page
}
步驟4:
如果會話到期/用戶註銷
也刪除會話表項
這是非常基本的問題設計
你們中的任何一個人有更好的主意/建議?
我不認爲這個問題與Java或Java-ee有什麼關係。沒有?我的意思是,這是關於一種方法的討論,這是與語言無關的。如果您希望我們實際檢查您的代碼,那麼適當的網站將爲CodeReview.StackExchange.com – 2012-01-04 12:38:00
請參閱http://stackoverflow.com/questions/667508/whats-a-good-rate-limiting-algorithm – skaffman 2012-01-04 12:44:01
@ skaffman感謝 – 2012-01-04 12:51:33