Sha*_*Guy 5 java passwords console-application command-line-interface
用于从命令行读取密码而不显示密码的标准JVM方法java.io.Console.readPassword()
.但是,这在用户输入时没有显示任何内容; 习惯于图形程序的用户会希望出现"•"或"*"等符号来代替他们输入的字符.当然,他们也希望退格,插入等正常工作,只需将所有操作的角色替换为相同的符号即可.
在2019年,当用户在控制台应用程序中键入"hunter2"时,是否有一个普遍接受的JVM程序用于显示"*******"?没有GUI,这甚至可以正常完成吗?关于该主题的2011年SO问题得到了一个答案,链接到关于该主题的这篇文章 ; 我们现在能比其中所示的相当精细的解决方案做得更好吗?
(我碰巧使用Kotlin作为我选择的语言,因此如果有Kotlin特定的解决方案将会满足.)
猎人2?哇。参考文献已确认。
没有简单的方法。主要问题是,在用户按下 Enter 键之前,标准System.in
根本不会为您提供任何字符,因此无法模拟它(如果您尝试从 System.in 读取 char-for-char 并每隔一段时间发出一个 *按下某个键时,这将不起作用)。
不过,位于https://github.com/mabe02/lanterna的 Lanterna 库可以做到这一点。如果你想模仿它,那是非常复杂的。它有针对 UNIX 和 Windows 的分支代码路径。例如,在 unix 上,它使用一些 hackery 来找出您所在的 tty,然后打开正确的 /dev/tty 设备。有了灯笼,你自己写这个就很简单了。
就是这样,或者接受 Console.readPassword() 的空白,真的。或者,编写一个 Web 界面或 swing/awt/javafx GUI。