Менее безопасный вариант получения пароля через STDIN, который работает с фоновыми заданиями, виртуальными консолями и обычными консолями:
Это более совместимо и менее безопасно, оно должно работать с вашей виртуальной консолью в вашей IDE, для фоновых процессов, которые не имеют TTY, и обычных консолей. Когда консоль не найдена, она прибегает к использованию BufferedReader, который отображает пароль на экране, когда пользователь вводит его в некоторых случаях.
Java-код:
import java.io.*;
public class Runner {
public static void main(String[] args) {
String username = "Eric";
try {
ReadMyPassword r = new ReadMyPassword();
char[] password = r.readPassword(
"Hey %s, enter password to arm the nuclear wessels>", username);
System.out.println("Exposing the password now: '" +
new String(password) + "'");
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ReadMyPassword{
public char[] readPassword(String format, Object... args)
throws IOException {
if (System.console() != null)
return System.console().readPassword(format, args);
return this.readLine(format, args).toCharArray();
}
private String readLine(String format, Object... args) throws IOException {
if (System.console() != null) {
return System.console().readLine(format, args);
}
System.out.print(String.format(format, args));
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
return reader.readLine();
}
}
Вот как выглядит виртуальная консоль Eclipse:
Hey Eric, enter password to arm the nuclear wessels>12345
Exposing the password now: '12345'
Program Sisko 197 ready for implementation on your command
Вот как это выглядит через обычную консоль.
el@apollo:/home/el/bin$ java Runner
Hey Eric, enter password to arm the nuclear wessels>
Exposing the password now: 'abcdefg'
Program Sisko 197 ready for implementation on your command
el@apollo:/home/el/bin$