Java实现用户不可重复登录功能

下面就是Java实现用户不可重复登录功能的完整攻略。

下面就是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实现用户不可重复登录功能

基础教程推荐