当有人注册时,用户名和密码将保存在.txt文件中。 下面的代码验证每一行以检查文件中是否存在用户名和密码。
但是,我不希望它以这种方式工作,因为它获得了一个随机密码的用户名... 我需要它来验证每个注册用户的用户名和密码,任何帮助? (我正在使用NetBeans)
public boolean isCustomer(){
boolean isFound = false;
String record = null;
FileReader in = null;
try{
in = new FileReader ("login.txt");
BufferedReader bin = new BufferedReader(in);
record = new String();
while ((record = bin.readLine()) != null)
{
if (NameTextField.getText().contentEquals(record))
isFound = true;
if (jPasswordField.getText().contentEquals(record))
isFound = true;
}
bin.close();
bin = null;
}catch(IOException ioe){
NameTextField.setText("IOProblem");
}
return isFound;
}
login.txt看起来像这样(用户名,然后是密码,“$$$”作为分隔符):
Joe
656451asda
$$$
Robert
123456hbb
$$$
Tracey
56464999abc
$$$
Celia
abc1234897
$$$
答案 0 :(得分:1)
这......
if (NameTextField.getText().contentEquals(record))
isFound = true;
if (jPasswordField.getText().contentEquals(record))
isFound = true;
表示如果在文本文件中找到用户名或密码,则返回true。我很确定你不想这样做。
最好使用两个标记(例如foundUser
和foundPassword
),您可以根据需要设置,然后return foundUser && foundPassword
根据反馈更新
检查用户名/密码值时,您需要确保您尝试匹配的密码与用户匹配,例如......
if (foundUser && jPasswordField.getText().contentEquals(record)) {
foundPassword = true;
break; // No need to compare any more details...
} else {
foundUser = false;
}
if (NameTextField.getText().contentEquals(record)) {
foundUser = true;
}
<强>更新强>
作为旁注,你真的不应该使用JPasswordField#getText
,因为这是一个安全风险。您应该使用JPassword#getPassword
并使用Arrays.equals(char[], char[])
进行比较。
这显然会引起您如何从文本文件中读取数据的问题。
(请注意,在文本文件中使用用户名/密码可能存在更大的安全风险:P)
答案 1 :(得分:0)
你应该真正使用数据库。
如果不是,那么下一个最好的事情就是扫描文件并使用带有用户名的Map作为密钥。但是,如果程序崩溃,您仍需要相应地更新文件。
答案 2 :(得分:0)
您不能对用户名和密码使用相同的布尔值。一旦找到它,它将被设置为true,如果它找到另一个并不重要(这是错误的,它们都需要在那里!)。
我会这样设置:
private String getUsername(String filename) {
// 1. Open up the file.
// 2. Return the String.
}
private String getPassword(String filename) {
// Basically the same, but return the password.
}
然后,在isCustomer()中你可以这样做:
String username = getUsername(filename);
String password = getPassword(filename);
return (username != null) && (password != null); // makes sure they're both there.
(另外,你真的不应该将它存储在一个未加密的文本文件中。这是一个非常糟糕的主意,如果你想成为一名程序员,你需要学习它。)
答案 3 :(得分:0)
正如其他答案所指出,你应该考虑很多问题:
您不应存储普通密码。从密码计算哈希值并存储哈希值。
如果可能,请使用数据库而不是文本文件
如果您不能使用数据库存储单行文本的用户名/密码信息。这是一种类似于Unix密码文件中使用的格式:
joe:fjckdsoij48738423
marian:fjccoekrnvn3iernci3en
mrbean:fjd84jfn4u48fu4nf
如果要检查密码(从第1点开始的密码哈希),您可以逐行读取密码文件。在第一个':'字符出现时拆分该行以查找用户名和密码。与用户提供的数据进行比较。
答案 4 :(得分:-1)
将用户名和密码放在同一行文本中。