Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
验证保存在txt Java文件中的用户名和密码_Java_Login - Fatal编程技术网

验证保存在txt Java文件中的用户名和密码

验证保存在txt Java文件中的用户名和密码,java,login,Java,Login,当有人注册时,用户名和密码保存在.txt文件中。 下面的代码验证每一行,以检查文件中是否存在用户名和密码 但是,我不希望它以这种方式工作,因为它会得到一个带有随机密码的用户名。。。 我需要它来验证每个注册用户的用户名和密码,有什么帮助吗? (我正在使用NetBeans) login.txt如下所示(用户名、密码和“$$$”分隔符): 将用户名和密码放在同一行文本中。您真的应该为此使用数据库 如果不是的话,下一个最好的方法是扫描文件,并使用用户名作为密钥的映射。但是,您仍然需要相应地更新文件,以

当有人注册时,用户名和密码保存在.txt文件中。 下面的代码验证每一行,以检查文件中是否存在用户名和密码

但是,我不希望它以这种方式工作,因为它会得到一个带有随机密码的用户名。。。 我需要它来验证每个注册用户的用户名和密码,有什么帮助吗? (我正在使用NetBeans)


login.txt如下所示(用户名、密码和“$$$”分隔符):


将用户名和密码放在同一行文本中。

您真的应该为此使用数据库

如果不是的话,下一个最好的方法是扫描文件,并使用用户名作为密钥的映射。但是,您仍然需要相应地更新文件,以防程序崩溃

这个

if (NameTextField.getText().contentEquals(record))
    isFound = true;
if (jPasswordField.getText().contentEquals(record))
    isFound = true;
这意味着,如果在文本文件中找到用户名或密码,它将返回true。我很确定你不想这么做

最好使用两个标志(
foundUser
foundPassword
),您可以根据需要设置它们,然后
返回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;
}
已更新

作为补充说明,你真的不应该使用它,因为这是一个安全风险。您应该使用和来比较它们

这显然也会引起如何从文本文件中读取数据的问题


(请注意,在文本文件中包含用户名/密码可能会带来更大的安全风险:p)

用户名和密码不能使用相同的布尔值。一旦它找到一个,它将被设置为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.
}
然后,在iCustomer()中,您可以执行以下操作:

String username = getUsername(filename);
String password = getPassword(filename);
return (username != null) && (password != null); // makes sure they're both there.

(另外,你真的不应该将其存储在未加密的文本文件中。这是一个非常糟糕的主意,如果你想成为一名程序员,你需要学习这一点。)

正如其他答案所指出的,你应该考虑很多问题:

  • 您不应该存储普通密码。根据密码计算哈希并存储哈希

  • 如果可能,请使用数据库而不是文本文件

  • 如果无法使用数据库,请将用户名/密码信息存储在一行文本中。以下是一种与Unix密码文件中使用的格式类似的格式:

    joe:fjckdsoij48738423
    marian:fjccoekrnvn3iernci3en
    mrbean:fjd84jfn4u48fu4nf
    

  • 当您想要检查密码时(从第1点看,密码的散列),您可以逐行读取密码文件。在第一个“:”字符出现时拆分行以查找用户名和密码。与用户提供的数据进行比较。

    该解决方案虽然有效,但避开了代码中的逻辑错误,也不算太麻烦。但即使进行了此更正,您也在检查所有用户名中的用户名和所有密码中的密码。但您并没有检查它们是否相互对应other@manu-fatto我希望更新能修复它-谢谢你的关注!非常感谢你!我让它工作了,现在需要一些调整,但是非常好的帮助!:D能否显示文件login.txt的外观?在奇数行中,用户名和密码在偶数行中?您是否考虑过更改文件格式?我没有考虑其他选项,还有哪些其他选项?最好的格式是将用户名和密码保持在同一行,如Unix密码文件:Joe:656451asda\n Robert:123456hbb
    String username = getUsername(filename);
    String password = getPassword(filename);
    return (username != null) && (password != null); // makes sure they're both there.
    
    joe:fjckdsoij48738423
    marian:fjccoekrnvn3iernci3en
    mrbean:fjd84jfn4u48fu4nf