Java 禁止显示System.in到System.out(提示输入密码)
我想在Java代码中提示用户输入密码,出于安全原因,我不希望将输入打印到屏幕上Java 禁止显示System.in到System.out(提示输入密码),java,passwords,Java,Passwords,我想在Java代码中提示用户输入密码,出于安全原因,我不希望将输入打印到屏幕上 我知道类控制台,但出于测试原因,我希望能够从IDE运行我的程序。有其他选择吗?我强烈建议在可能的情况下使用控制台的设置,如果没有,则使用扫描仪或读卡器 然而,对于这个问题的具体措辞,有一个非常丑陋的解决方案 解决方案基本上是反复向控制台发送退格(\b)字符,以隐藏写入的内容。也许你可以用某种类型的监听器来制定一个资源更友好的版本,但我不确定这一点 一些示例代码正好可以做到这一点: public class PwdCo
我知道类
控制台
,但出于测试原因,我希望能够从IDE运行我的程序。有其他选择吗?我强烈建议在可能的情况下使用控制台
的设置,如果没有,则使用扫描仪
或读卡器
然而,对于这个问题的具体措辞,有一个非常丑陋的解决方案
解决方案基本上是反复向控制台发送退格(\b
)字符,以隐藏写入的内容。也许你可以用某种类型的监听器来制定一个资源更友好的版本,但我不确定这一点
一些示例代码正好可以做到这一点:
public class PwdConsole {
public static void main(String[] args) throws Exception {
ConsoleEraser consoleEraser = new ConsoleEraser();
System.out.print("Password? ");
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
consoleEraser.start();
String pass = stdin.readLine();
consoleEraser.halt();
System.out.print("\b");
System.out.println("Password: '" + pass + "'");
}
class ConsoleEraser extends Thread {
private boolean running = true;
public void run() {
while (running) {
System.out.print("\b ");
}
public synchronized void halt() {
running = false;
}
}
}
我能找到的唯一解决方案是使用控制台,但如果没有控制台,就求助于普通读者。这里有人提出:有效而且非常丑陋。因为显然没有更好的解决方案,所以我将暂时使用它,直到我在代码中考虑到其他可能的更改。谢谢:)