在网上关于JAVA下密码屏蔽输入的文章比较多了,但是都不是多全面和详细,今天在http://java.sun.com上看到了此文章,打算把它翻译出来。因为经验不够,可能翻译的还有出入。
本篇文章(指原文)第一次发表于2002年9月。在JAVA下,利用AWT/SWING对用户输入密码进行屏蔽是很方便的,但是缺少I/O API,因此在命令行下来实现像UNIX的PASSWORD shadow就不容易了。本文就利用AWT/SWING/COMMAND LINE三种情况都一一作了较详细的介绍。
Password Masking in AWT
---------------------------------
如果提供图形界面登录对话框,可以利用AWT组件库中定义的TextField对象,该对象的定义继承结构如下:
java.lang.Object
|
+--java.awt.Component
|
+--java.awt.TextComponent
|
+--java.awt.TextField
在该对象中,定义了用于设置和维护用户输入字符回显方式的方法,这些方法的定义形式为:
char getEchoChar():获取用户定义的文本区回显字符;
boolean echoCharIsSet()判断是否定义了回显字符;
void setEchoChar(char c):设置文本区回显字符为字符。
具体代码为:
TextField password = new TextField(8);
password.setEchoChar('*');
其中8为文本输入的最大字符数,如果为0的话,则密码不会被屏蔽。
Password Masking in Swing
---------------------------------
利用JSWING组件,可以用JPasswordField对象,它的继承结构为:
java.lang.Object
|
+--java.awt.Component
|
+--java.awt.Container
|
+--javax.swing.JComponent
|
+--javax.swing.text.JTextComponent
|
+--javax.swing.JTextField
|
+--javax.swing.JPasswordField
具体代码为:
JPasswordField password = new JPasswordField(8);
password.setEchoChar('#');
Command-Line Input Masking
----------------------------------
不像Awt/Swing,在Java中没有专门用于屏蔽命令行下文本输入的API.如果想提供基于命令行文本输入的JAVA应用程序,一种方法是用Java Native Interface(JNI),但是对于一不太熟悉C/C++的开发者,或者坚持要用100%纯JAVA的开发者是难了一些。
这里提供针对此问题一个解决方案,较早的写关于此问题的文章,是像UNIX一样,用一个独立的线程来屏蔽(擦除)回显的字符。这篇文章,现在可以在http://forum.java.sun.com/thread.jsp?forum=9&thread=490728看到。
简单的解决方法
================
用一个独立的线程,在字符输入时擦除回显的字符,并用星号(*)来替换。代码如下:
//EraserThread.java
import java.io.*;
class EraserThread implements Runnable {
private boolean stop;
&nb

本文详细介绍了在Java的AWT、Swing以及命令行环境下如何实现密码输入的屏蔽。通过使用TextField和JPasswordField组件在图形界面上实现,而在命令行下则通过创建单独的线程来实时替换输入字符,达到类似UNIX PASSWORD shadow的效果。提供了EraserThread和PasswordField类的代码示例,以及如何使代码更安全和可靠的方法。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



