Tengo una función de inicio de sesión. Quiero que mi función no funcione, por ejemplo, 10 segundos si el usuario la llama por más de 5 veces. ¿Qué debo hacer para eso? Estaré encantado si alguien responde a mi pregunta.
Debe registrar los intentos de inicio de sesión fallidos para un usuario (por ejemplo, en la base de database ) y una vez que alcanza el umbral, debe devolver la respuesta de error del método de login de sesión durante un período de tiempo configurable desde el último intento de inicio de sesión fallido, por ejemplo:
x minutos desde esa marca de tiempola función no funciona por ejemplo 10 segundos
Debe ser específico sobre lo que quiere decir exactamente con función para que no funcione . Pero si simplemente desea bloquear la llamada al método durante x segundos, siga el siguiente enfoque:
Debe crear un counter para contar la cantidad de intentos y luego if(counter>5) luego use Thread.sleep (10000) para realizar la solicitud de espera (dormir) durante 10 segundos. Idealmente, el valor del counter debe almacenarse en una base de datos (o cualquier otro almacenamiento) y leerlo nuevamente para validar la cantidad de intentos.
Pero, le sugiero encarecidamente que siga la respuesta de @Darshan, que tiene más sentido.
Primero necesitas identificar al usuario.
Esto se puede hacer sobre la base de IP.
Tener un mapa hash concurrente
ConcurrentHashMap<String,Long>IpAddressValidationMap // String is the Ip address and Long is the timeInMillesecondsHaces un filtro y pones un cheque
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()); }