Есть ли альтернатива JPasswordField?
При вводе парольной фразы типа
yeast bulk seize is shows pain
каждый может услышать нажатие пробела, поэтому кажется логичным отображать пробелы в поле пароля. Поэтому я хотел бы что-то, способное показать
***** **** ***** ** ***** ****
вместо
- jQuery Подтвердить плагин - проверка пароля - минимальные требования - Regex
- Ссылка - проверка пароля
- Каков наилучший способ настройки паролей, не имея их слишком легко доступным для обычного читателя?
- Как указать имя пользователя и пароль при подключении к сетевому ресурсу
- Открытие защищенного паролем pdf-файла с iTextSharp
******************************
Это упростило бы типизацию и вряд ли снизило безопасность.
ОБНОВИТЬ
Подумайте дважды, прежде чем обновлять комментарий Riduidel. Когда Брюс Шнайер пишет: «Пришло время показать большинство паролей в ясном тексте» , тогда небольшая часть его тоже должна быть правильной. Особенно показываю часть, которую можно захватить, просто слушая.
- Безопасно ли хранить пароли в файлах cookie?
- Должен ли я налагать максимальную длину на пароли?
- Какова наилучшая практика для работы с паролями в репозиториях git?
- Какой тип данных использовать для hashированного поля пароля и какой длины?
- Программно изменить тип ввода EditText с PASSWORD на NORMAL и наоборот
- Есть ли способ взломать пароль в проекте Excel VBA?
- Перемещение старых паролей в новый алгоритм hashирования?
- Почему char предпочитает использовать String для паролей?
Вот вариант, который использует setEchoChar()
чтобы сделать пароль видимым в течение предопределенного времени: например, три секунды.
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JPasswordField; import javax.swing.Timer; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; /** @see http://stackoverflow.com/questions/5339702 */ public class PasswordTest { public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGui(); } }); } private static void createAndShowGui() { JFrame jf = new JFrame("Test Password"); JPasswordField jpwd = new JPasswordField(); TimedPasswordListener tpl = new TimedPasswordListener(jpwd); jpwd.getDocument().addDocumentListener(tpl); jf.add(jpwd); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setLocationRelativeTo(null); jf.pack(); jf.setVisible(true); } } class TimedPasswordListener implements DocumentListener, ActionListener { private Timer timer = new Timer(3000, this); private char echoChar; private JPasswordField pwf; public TimedPasswordListener(JPasswordField jp) { pwf = jp; timer.setRepeats(false); } public void insertUpdate(DocumentEvent e) { showText(e); } public void removeUpdate(DocumentEvent e) { showText(e); } public void changedUpdate(DocumentEvent e) {} public void showText(DocumentEvent e) { if (0 != pwf.getEchoChar()) { echoChar = pwf.getEchoChar(); } pwf.setEchoChar((char) 0); timer.restart(); } public void actionPerformed(ActionEvent e) { pwf.setEchoChar(echoChar); } }
JPasswordField
что JPasswordField
просто JTextField
просто переопределяет компонент рендеринга, но, похоже, это не так.
Таким образом, вместо изменения средства визуализации (например, если бы JTextField
имел такой компонент), вам придется использовать JTextField
с настраиваемым Document
содержащим две строки:
- Текст паролей, написанный пользователем
- Отображаемый пароль
Вы должны будете убедиться, что все методы изменения Document
изменяют текст пароля, а все методы рендеринга используют отображаемый.