如何捕获已登录用户的userid,以便稍后引用?

xwmevbvl  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(298)

我正在java上创建一个登录系统。我已将用户标识和密码存储在哈希Map中。当用户登录到系统时。它们输入凭据,如果与哈希Map中的凭据匹配,则用户将登录。
我现在要做的是,捕获哪个用户通过userid登录。原因是我希望能够看到哪个用户按下了jbutton。为了做到这一点,我需要找到一种方法来引用已登录用户的userid。
我该怎么办?
下面的代码片段来自我的login类,它显示了我如何允许用户登录

@Override
    public void actionPerformed(ActionEvent e) {

        if(e.getSource()==resetButton) {
            userIDField.setText("");
            userPasswordField.setText("");
        }

        if(e.getSource()==loginButton) {

            String userID = userIDField.getText();
            String password = String.valueOf(userPasswordField.getPassword());

            if(logininfo.containsKey(userID)) {
                if(logininfo.get(userID).equals(password)) {
                    messageLabel.setForeground(Color.green);
                    messageLabel.setText("Login successful");
                    frame.dispose();
                    WelcomePage welcomePage = new WelcomePage(userID);
                }
                else {
                    messageLabel.setForeground(Color.red);
                    messageLabel.setText("Wrong password");                 
                }

            }
            else {
                messageLabel.setForeground(Color.red);
                messageLabel.setText("Incorrect, try again");
            }
        }
    }   
}

这个代码片段是来自idandpasswords类的,它显示了用户ID和密码的哈希Map

import java.util.HashMap;

public class IDandPasswords {

    HashMap<String,String> logininfo = new HashMap<String,String>();

    IDandPasswords(){

        logininfo.put("manager","abc123");
        logininfo.put("user1","abc123");
        logininfo.put("user2","abc123");
        logininfo.put("user3","abc123");
    }

    public HashMap getLoginInfo(){
        return logininfo;
    }
}
ovfsdjhp

ovfsdjhp1#

你在试图重现一个上下文
它是一个白板,我们将数据存储在应用程序的全局生命周期中。
实现这一点的一个简单方法是创建一个类,其中包含字符串、对象元素的hashmap HashMap<String,Object> 试着写一些方法
就像 initContext , setContextValue(String key, Object value) , Object getContextValue(String key) , getUser() ...
然后,尝试使用单例模式来安全地获得它,以确保它的唯一性。
关于引用对象,我建议使用typingsafety原则

public class ContextKeys{
    public static final String CURRENT_USER = "current_user_key_code_this could be any thing";
    public static final String MY_OTHER_KEY = "application_name"
}

假设你有这样一个上下文,你可以用任何你想要的方式来编码它。这是一个简单的编码思想。

public class Context {
  private static final HashTable<String,Object> _context ;

  public static Object getValueByKey(String key){ return _context.get(key);} 

}

电话会是这样的 Context.getValueByKey(ContextKeys.MY_OTHER_KEY) 如果您不喜欢string keys类,可以使用enum。尝试将此作为新的分配:)。

相关问题