用JAVA写出限制次数的用户登录是否正确
时间: 2023-05-28 20:01:10 浏览: 388
ssm+shiro+redis 登录控制及重试次数超过5次账号锁定一分钟
以下是一个简单的示例代码,用于限制用户登录次数并验证用户名和密码的正确性。在该示例中,用户只有三次机会输入正确的用户名和密码,否则将被锁定一段时间。
```java
import java.util.Scanner;
public class UserLogin {
private static final String USERNAME = "admin";
private static final String PASSWORD = "admin123";
private static final int MAX_ATTEMPTS = 3; // 允许的最大尝试次数
private static final long LOCK_TIME = 30000; // 锁定时间(毫秒)
private static int attempts = 0; // 当前尝试次数
private static long lockStartTime = 0; // 锁定开始时间
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
// 如果当前已经被锁定,则不再接受用户输入,直到锁定时间过期
if (isLocked()) {
long remainingTime = getRemainingLockTime();
System.out.println("您已经错误登录过多次,账号已被锁定,请 " + remainingTime / 1000 + " 秒后重试");
sleep(remainingTime);
}
// 接受用户输入
System.out.print("请输入用户名:");
String username = scanner.nextLine();
System.out.print("请输入密码:");
String password = scanner.nextLine();
// 验证用户名和密码是否正确
if (USERNAME.equals(username) && PASSWORD.equals(password)) {
System.out.println("欢迎回来," + USERNAME + "!");
break;
} else {
System.out.println("用户名或密码不正确,请重新输入");
attempts++;
if (attempts >= MAX_ATTEMPTS) {
lockStartTime = System.currentTimeMillis();
attempts = 0;
}
}
}
}
// 判断当前是否被锁定
private static boolean isLocked() {
return lockStartTime > 0 && System.currentTimeMillis() - lockStartTime < LOCK_TIME;
}
// 获取距离解锁还剩余的时间(毫秒)
private static long getRemainingLockTime() {
return lockStartTime + LOCK_TIME - System.currentTimeMillis();
}
// 线程休眠
private static void sleep(long millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
在该示例中,我们首先在代码中定义了一个用户名和密码,以及允许的最大尝试次数和锁定时间。然后使用一个 while 循环来接受用户的输入,如果失败次数大于等于最大尝试次数,则将用户锁定一段时间。如果输入正确,则退出循环并显示欢迎信息。
为了实现锁定机制,我们使用了一个静态变量 `lockStartTime` 来记录锁定的开始时间,以及一个静态变量 `attempts` 来记录尝试次数。在验证用户名和密码的代码块中,如果输入不正确,则将 `attempts` 加 1,如果达到了最大尝试次数,则将 `lockStartTime` 设置为当前时间,并将 `attempts` 重置为 0。在接受用户输入时,如果 `lockStartTime` 大于 0 并且距离当前时间不足锁定时间,则提示用户锁定状态并让程序等待一段时间。
阅读全文