Java 使用hashmap检查密码

Java 使用hashmap检查密码,java,passwords,hashmap,Java,Passwords,Hashmap,我想使用此操作侦听器方法检查用户名和密码 但我总是得到错误的密码 public void actionPerformed(ActionEvent arg0) { String uN = usernameFiled.getText(); String pass = passwordField.getPassword().toString(); // if (uN.isEmpty() || pass.isEmpty()){ JOptionPa

我想使用此操作侦听器方法检查用户名和密码 但我总是得到错误的密码

public void actionPerformed(ActionEvent arg0) {
    String uN = usernameFiled.getText();
    String pass = passwordField.getPassword().toString();
    //

    if (uN.isEmpty() || pass.isEmpty()){
            JOptionPane.showMessageDialog(LoginPage.this, "Fields should not be empty!", "Error", JOptionPane.ERROR_MESSAGE);
            return;
    }



    HashMap<String, User> users =  UserDAO.getInstance().getUsers();

    User temp = users.get(uN);

    if (temp.getPassword().equals(pass)){
            JOptionPane.showMessageDialog(LoginPage.this, "Login successfull", "Success", JOptionPane.INFORMATION_MESSAGE);

    }

    else {
            JOptionPane.showMessageDialog(LoginPage.this, "Wrong username or password", "Error ", JOptionPane.ERROR_MESSAGE);
    }
    }
});
public void actionPerformed(ActionEvent arg0){
字符串uN=usernamefield.getText();
字符串pass=passwordField.getPassword().toString();
//
if(uN.isEmpty()| | pass.isEmpty()){
JOptionPane.showMessageDialog(LoginPage.this,“字段不应为空!”,“Error”,JOptionPane.Error\u消息);
返回;
}
HashMap users=UserDAO.getInstance().getUsers();
用户临时=用户获取(uN);
如果(临时getPassword()等于(通过)){
showMessageDialog(LoginPage.this,“登录成功”,“成功”,JOptionPane.INFORMATION\u消息);
}
否则{
showMessageDialog(LoginPage.this,“错误的用户名或密码”,“错误”,JOptionPane.Error\u消息);
}
}
});

代码有什么问题

passwordField.getPassword()
返回
char[]
。因此,通过调用toString()为您提供对象字符串
char[]

String pass = passwordField.getPassword().toString(); 
按以下方式使用它

String pass = new String(passwordField.getPassword());
JPasswordField#getPassword
char[]
中返回此文本组件中包含的文本
char[].toString()
不返回字符串值,
array.toString
实际上返回变量名和hascode

您应该调用
newstring(passwordField.getPassword())
String.valueOf(passwordField.getPassword())

试一试-


首先,您似乎正在以纯文本形式存储密码。。。除此之外,很难说清楚-您执行了哪些诊断?用户#获取密码实际返回了什么?别忘了这是(正确的)区分大小写的。不要使用passwordField.getPassword().toString()`这是一种安全风险。密码比较应该使用某种散列算法来完成,否则我可能会尝试对此进行投票,除非它引入了一个安全漏洞。请您解释一下,安全漏洞是什么?通过将密码从
char[]
转换为
字符串
,该字符串将被固定在JRE中(在JRE运行时),您可以让某人检查内存并以明文形式找到密码。这就是为什么存在
getPassword
方法的原因
String pass = new String(passwordField.getPassword());
String pass = String.valueOf(passwordField.getPassword());