簡體   English   中英

使函數無法在Java中運行幾秒鍾

[英]making a function not to work for a few some seconds in java

我有一個登錄功能,如果用戶調用它超過5次,我希望我的功能在10秒鍾內不起作用,那我該怎么辦?如果有人回答我的問題,我會很高興。

您需要記錄用戶的失敗登錄嘗試(例如,在database ),並且一旦達到閾值,就需要從上次失敗的登錄嘗試開始,在可配置的時間內從login方法返回錯誤響應,例如:

  • 登錄失敗時,將其登錄到數據庫(以及時間戳)
  • 登錄嘗試期間,獲取失敗嘗試計數並檢查其是否已達到配置的閾值
  • 如果超過閾值,請檢查上次登錄的時間戳,如果當前日期在距該時間戳的x分鍾之內,則阻止呼叫
  • 成功登錄后,清除所有失敗的嘗試

功能不起作用,例如10秒

您需要具體說明不起作用的確切含義。 但是,如果您只是想阻塞x秒的方法調用,請遵循以下方法:

您需要創建一個counter來計算嘗試次數,然后創建if(counter>5)並使用Thread.sleep(10000)來使請求保持(睡眠)10秒鍾。 理想情況下, counter值應保存在數據庫(或任何其他存儲)中,然后再次讀取該值以驗證嘗試次數。

但是,我強烈建議您遵循@Darshan的回答,這更有意義。

首先,您需要識別用戶。

這可以基於IP來完成。

有一個ConcurrentHashMap

   ConcurrentHashMap<String,Long>IpAddressValidationMap  // String is the Ip address and Long is the timeInMilleseconds

您做一個過濾器並進行檢查

     public void prefilterFunction(RequestObject object)
      {
          String ip=object.getIP(); // just an example not the standard call for getting Ip addr
           Long time=IpAddressValidationMap.get(ip);
           if(time!=null)
           { 
             if(time<THRESHOLD_TIME)
               {
                 return ;  
                 }     
                 else
                {
                 // We allow the user to proceed
                 }
            }
       }

      public void validateLogin(RequestObject object)
      {
       // if the login fails 
         IpAddressValidationMap.put(ipAddr,System.currentTimeinMIllis());   
       }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM