在网上关于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一样,用一个