Я пишу программу командной строки, которая запрашивает пароль, и я не хочу, чтобы он делал локальное эхо символов пароля.После некоторых поисков я наткнулся на System.console().readPassword()
, что выглядит замечательно, за исключением при работе с каналами в Unix.Итак, мой пример программы (ниже) работает нормально, когда я вызываю ее как:
% java PasswdPrompt
, но завершается неудачно с Console == null, когда я вызываю ее как
% java PasswdPrompt | less
или
% java PasswdPrompt < inputfile
ИМХО, это похоже на проблему с JVM, но я не могу быть единственным, кто столкнулся с этой проблемой, поэтому я должен представить, что есть несколько простых решений.
Кто-нибудь?
Заранее спасибо
import java.io.Console;
public class PasswdPrompt {
public static void main(String args[]) {
Console cons = System.console();
if (cons == null) {
System.err.println("Got null from System.console()!; exiting...");
System.exit(1);
}
char passwd[] = cons.readPassword("Password: ");
if (passwd == null) {
System.err.println("Got null from Console.readPassword()!; exiting...");
System.exit(1);
}
System.err.println("Successfully got passwd.");
}
}