将System.in抑制到System.out(提示输入密码)

时间:2014-07-24 12:51:22

标签: java passwords

我想提示用户输入Java代码中的密码,出于安全原因,我宁愿不将输入打印到屏幕上。

我知道类Console,但我希望能够从IDE运行我的程序以进行测试。任何替代方案?

1 个答案:

答案 0 :(得分:1)

我强烈建议您使用尽可能使用Console的设置,如果不是ScannerReader,则会回退。

然而,这个问题的具体措辞有一个非常丑陋的解决方案,I found here

解决方案基本上是重复地将退格(\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;
        }
    }
}