我有一个简单的任务要完成:从命令行提示符读取密码而不暴露它。我知道有java.io.Console.readPassword
,但是,有时您无法访问控制台,就像从IDE(例如IntelliJ)运行应用程序一样。
我偶然发现了这个看起来不错的Password Masking in the Java Programming Language教程,但是我没有在Scala中实现它。到目前为止,我的解决方案是:
class EraserThread() extends Runnable {
private var stop = false
override def run(): Unit = {
stop = true
while ( stop ) {
System.out.print("\010*")
try
Thread.sleep(1)
catch {
case ie: InterruptedException =>
ie.printStackTrace()
}
}
}
def stopMasking(): Unit = {
this.stop = false
}
}
val et = new EraserThread()
val mask = new Thread(et)
mask.start()
val password = StdIn.readLine("Password: ")
et.stopMasking()
当我开始这个片段时,我会在新行上连续打印星号。 E.g:
*
*
*
*
Scala中有什么特定的,为什么这不起作用?或者在Scala中有更好的方法吗?