我想使用此動作偵聽器方法檢查用戶名和密碼 但我總是得到錯誤的密碼!使用散列映射進行密碼檢查
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);
}
}
});
代碼的問題是什麼?
首先,你似乎是採用明文存儲的密碼......除此之外,它很難肯定地說 - 您執行了哪些診斷? –
「User#getPassword」實際返回的是什麼?不要忘記它的(正確)大小寫敏感。不要使用'passwordField.getPassword()。toString()'這是一個安全風險。密碼比較應該使用某種散列算法,而不是 – MadProgrammer