gpt4 book ai didi

java - JPasswordField 转为字符串但无法比较

转载 作者:行者123 更新时间:2023-12-01 17:19:51 34 4
gpt4 key购买 nike

您好,我在这里尝试做的是接收用户输入的密码,然后将其与 if 语句中的正确密码进行比较。

public void actionPerformed(ActionEvent event)
{
String UsersStoredPassword = "hello";
String UsersEnteredPassword = new String(PasswordField.getPassword());
String Message = "The Password You Have Entered Is Correct";
String Message1 = "You Have Entered The Wrong Password";

if (event.getSource() == PasswordField)
{
if (UsersEnteredPassword == UsersStoredPassword)
{
JOptionPane.showMessageDialog(null, Message);
}
else
{
JOptionPane.showMessageDialog(null, Message1);
}

}
}

然而,事件认为用户输入了正确的密码:“hello”,它仍然显示消息1:“您输入了错误的密码。我已尝试这样做:

public class TheHandler implements ActionListener
{
public void actionPerformed(ActionEvent event)
{

String UsersStoredPassword = "hello";
String UsersEnteredPassword = new String(PasswordField.getPassword());
String Message = "The Password You Have Entered Is Correct";
String Message1 = "You Have Entered The Wrong Password";

if (event.getSource() == PasswordField)
{
JOptionPane.showMessageDialog(null, UsersEnteredPassword);
}
}
}

它显示了在里面输入的UsersEnteredPassword。

最佳答案

您正在使用 == 运算符比较 2 个 String,该运算符不会比较 String 内容,但这不是真正的问题:

您在此处创建了一个安全漏洞。

说明:JPassword.getText 已被有意弃用,以避免使用 Strings,而改用 char[] > 由 getPassword 返回。

当调用getText时,你会得到一个不可更改的字符串(不可变对象(immutable对象))(反射除外),因此密码会保留在内存中,直到垃圾收集为止。

然而,字符数组可能会被修改,因此密码实际上不会保留在内存中。

使用Array.equals相反

if (Arrays.equals(usersEnteredPassword.toCharArray()), 
passwordField.getPassword()) {
// password match!
}

旁白:遵循 Java 命名约定,使用小写字母作为变量名称的首字母,如上所示。阅读 Naming Conventions

关于java - JPasswordField 转为字符串但无法比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19515045/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com