繁体   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