JavaRush /Java блог /Random UA /Як приховати символи пароля під час введення консолі?
fatfaggy
26 рівень
Киев

Як приховати символи пароля під час введення консолі?

Стаття з групи Random UA
Таке питання. Консольний додаток, користувач вводить логін та пароль. Але під час введення пароля необхідно "маскувати" кожен символ пароля зірочкою наприклад, або як у лінуксі просто не виводити жодних символів під час введення пароля. Знайшов варіант із використанням окремого потоку для цього. Виглядає приблизно так: package main; import java.io.*; public class Main { public static void main(String[] args) { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter username: "); String user = in.readLine(); Thread hide = new PasswordsHider("Enter password: "); hide.start(); String pass = in.readLine(); hide.interrupt(); } private static class PasswordsHider extends Thread { public PasswordsHider(String prompt) { super("Hiding passwords thread"); System.out.print(prompt); } @Override public void run() { while (!isInterrupted()) { System.out.print("\010"); try { Thread.sleep(1); } catch (InterruptedException e) { //e.printStackTrace(); } } } } } але під час виконання замість того, щоб "затирати" символи, що вводяться - просто виводиться на екран купа прогалин :) Пробував замість "\010" використовувати "\010*", але тоді до кожного пробілу ще зірочка додається)) При "\b" у виводі знову купа прогалин. Може якщо з командного рядка запускати буде працювати, але в ідеї - ось так ось як я написав. Зустрічав, що це низькопріоритетний баг такий в Екліпсі, але про ідею – жодного слова.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ