下面就是Java实现用户不可重复登录功能的完整攻略。
思路概述
为实现用户不可重复登录功能,我们可以用一个集合来保存已经登录的用户的信息,当一个用户登录成功后,将他的身份信息存入集合。之后的登录请求中,若用户已经登录,则直接拒绝登录;否则,将他的身份信息存入集合。
实现过程
1. 定义一个静态集合用于保存已经登录的用户信息
为了方便操作,这里我们使用HashMap并采用线程安全的ConcurrentHashMap。代码如下:
import java.util.concurrent.ConcurrentHashMap;
public class UserUtils {
// 存储已经登录的用户
private static ConcurrentHashMap<String, String> userMap = new ConcurrentHashMap<>();
}
2. 编写登录模块的核心代码
当用户登录时,需要先检查该用户是否已经登录。若已经登录,则返回登录失败的消息;否则将该用户的身份信息存入userMap中并返回登录成功的消息。代码实现如下:
public class LoginServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userId = request.getParameter("userId");
String password = request.getParameter("password");
// 检查用户是否已经登录
if (UserUtils.userMap.containsKey(userId)) {
response.getWriter().write("用户" + userId + "已经登录!");
return;
}
// 将用户身份信息存入集合
UserUtils.userMap.put(userId, password);
response.getWriter().write("用户" + userId + "登录成功!");
}
}
3. 编写登出模块的核心代码
当用户登出时,需要将该用户从userMap中移除。代码实现如下:
public class LogoutServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userId = request.getParameter("userId");
// 将用户从集合中移除
UserUtils.userMap.remove(userId);
response.getWriter().write("用户" + userId + "已经登出!");
}
}
示例说明
示例1
假设现在有两个用户A、B,分别尝试用不同的浏览器登录该网站。用户A先登录成功,而用户B等待几分钟后再尝试登录,此时用户B登录失败,提示信息为:“用户B已经登录!”。此时,用户A退出登录,用户B再次尝试登录成功。
示例2
假设现在有两个用户A、B,分别使用同一台计算机,通过不同的浏览器登录该网站。用户A先登录成功,而用户B使用另一个浏览器尝试登录,此时用户B登录成功。用户A再使用该浏览器尝试登录,此时用户A的登录失败,提示信息为:“用户A已经登录!”。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现用户不可重复登录功能 - Python技术站