在Scala中以与控制台无关的方式读取密码

时间:2018-02-07 16:11:45

标签: scala io console

我有一个简单的任务要完成:从命令行提示符读取密码而不暴露它。我知道有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中有更好的方法吗?

0 个答案:

没有答案