我无法匹配为用户密码输入的输入和用户的实际密码(如果用户存在)。实际密码作为字符数组存储在文件中。我尝试将数组打印为字符串,但输出与字符数组表示相同。
以下代码段从文件中读取密码,并将其与用户输入的密码进行比较,以确定用户是否应登录到客户端。该文件以下列方式存储数据 - “user”,“password”,“address”。
文件中的日期示例:
radi1006,[C @ 4f1c987b,The Shire,SO1
public void checkCredentials(String username, char[] password)
{
if(fileExists("users" + File.separator + username + ".txt"))
{
FileReader fileR;
BufferedReader buffR = null;
try
{
fileR = new FileReader("users" + File.separator + username + ".txt");
buffR = new BufferedReader(fileR);
String[] info = buffR.readLine().split(", ");
if(Arrays.equals(password,info[1].toCharArray()))
{
loginResponse = "success";
client = new ClientApplication();
client.init();
}
else
{
loginResponse = "Wrong username or password.";
return;
}
}
catch (Exception e)
{
}
finally
{
try
{
buffR.close();
}
catch (IOException e)
{
}
}
}
else
{
loginResponse = "There is no such user.";
}
}
答案 0 :(得分:0)
文件中的日期示例:
radi1006, [C@4f1c987b, The Shire, SO1
看起来您的问题不在于阅读并比较这些值。相反,您没有正确地将密码存储在文件中。
[C@4f1c987b
是您在.toString()
上致电char[]
时获得的。
(如果有人提供[C@4f1c987b
作为密码,您的代码会通过它。)
当您从密码字段中获取char[]
并希望将其写入文本文件时,需要将其转换为字符串。基本上:
final String s = new String(password, StandardCharsets.UTF_8);
(这假设我们并不过分关注安全性,因为JPasswordField
没有返回String的原因是String不会在堆中挂起明确。阅读here。)