Java:如何从文件中读取密码?

3

我正在使用System.console()来读取用户密码。

我的代码:

    Console console = System.console();
    if (console == null) {
        throw new RuntimeException("No console is available for input");
    }

    System.out.print("Enter the password: ");
    String password = new String(console.readPassword());

当我直接从Redhat运行它时,一切正常。

问题是当我尝试从文本文件中读取密码时:

java -jar my_jar.jar < password.txt

我得到:

没有可用于输入的控制台。

我应该如何解决?


这听起来像是一个已知的错误/问题:System.console返回null。有关信息和可能的解决方法,请参阅此问题的答案:https://dev59.com/Lm855IYBdhLWcg3wrGdY - Akunosh
1个回答

0
这种行为是可以预期的。引用自java.io.Console
“虚拟机是否具有控制台取决于底层平台以及调用虚拟机的方式。如果从交互式命令行启动虚拟机而没有重定向标准输入和输出流,则其控制台将存在,并且通常将连接到从中启动虚拟机的键盘和显示器。”
如果您想在不使用Console的情况下找到可能的解决方案,可以阅读此答案Trying to read from the console in Java
如果控制台存在,则可以继续使用控制台,否则可以回退到BufferedReader/Scanner

谢谢,但我想使用Java控制台提供的密码混淆选项。 - Saar peer
如果控制台存在,您可以继续使用控制台,并在不存在时回退到BufferedReader/Scanner。如果没有控制台,我不明白如何使用Java控制台提供的“密码混淆选项”。 - chimmi
我不想使用BufferedReader/Scanner,因为这样会存在用户设置未混淆密码的风险。无论如何,你可能是对的,没有解决方案。我将添加一个选项来通过文本文件发送密码。 - Saar peer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接