Java: Cách sử dụng Password Field
Lớp JPasswordField
là một lớp con của JTextField
có nhiệm vụ cung cấp trường văn bản dùng để nhập mật khẩu (password), đó là password field. Vì lý do bảo mật mà password field không hiển thị các ký tự do người dùng điền vào, thay vào đó là các ký tự thay thế gồm các dấu chấm. Để đảm bảo tính bảo mật hơn nữa thì password field sẽ lưu các giá trị của nó dưới dạng một mảng các ký tự thay vì một chuỗi. Cũng tương tự text field thì password field sẽ kích hoạt một action event khi người dùng điền xong văn bản và nhấn Enter.
Toàn bộ ví dụ về trường password các bạn có thể xem tại phần PasswordDemo.
Hình dưới đây minh họa về cách thức xuất hiện của trường password khi người dùng soạn ký tự vào.
Dưới đây là đoạn mã ví dụ dùng để tạo và thiết lập password field:
passwordField = new JPasswordField(10);
passwordField.setActionCommand(OK);
passwordField.addActionListener(this);
Đối số truyền vào hàm tạo JPasswordField
là kích thước của trường, giá trị 10 tương ứng với độ rộng là 10 cột. Mặc định thì một trường password sẽ hiển thị các ký tự trong nó dưới dạng các dấu chấm đậm, nếu bạn muốn thay đổi điều này thì bạn sử dụng phương thức setEchoChar
. Đoạn mã sau đây sẽ thêm một action listener tới trường password, trường này sẽ kiểm tra giá trị mà người dùng đã soạn. Đây là sự thực thi của phương thức actionPerformed
của action listener:
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (OK.equals(cmd)) { //Xử lý mật khẩu.
char[] input = passwordField.getPassword();
if (isPasswordCorrect(input)) {
JOptionPane.showMessageDialog(controllingFrame,
"Success! You typed the right password.");
} else {
JOptionPane.showMessageDialog(controllingFrame,
"Invalid password. Try again.",
"Error Message",
JOptionPane.ERROR_MESSAGE);
}
//Không hiện mật khẩu cụ thể để bảo mật.
Arrays.fill(input, '0');
passwordField.selectAll();
resetFocus();
} else ...//xử lý nút lệnh Help...
}
Lưu ý bảo mật: Để nâng cao tính bảo mật thì mỗi khi bạn kết thúc với mảng ký tự được trả về từ phương thức
getPassword
thì bạn cần thiết lập từng phần tử một về 0. Đoạn mã ngay bên trên dùng để thực hiện điều này.
Một chương trình mà sử dụng trường password nói chung trước tiên sẽ kiểm tra tính hợp lệ của mật khẩu trước khi hoàn thành bất kỳ một hành động nào mà yêu cầu mật khẩu đó. Chương trình sau đây sẽ gọi một phương thức private là isPasswordCorrect
, phương thức này sẽ so sánh giá trị trả về từ phương thức getPassword
với giá trị được lưu trong mảng ký tự:
private static boolean isPasswordCorrect(char[] input) {
boolean isCorrect = true;
char[] correctPassword = { 'b', 'u', 'g', 'a', 'b', 'o', 'o' };
if (input.length != correctPassword.length) {
isCorrect = false;
} else {
isCorrect = Arrays.equals (input, correctPassword);
}
//Zero out the password.
Arrays.fill(correctPassword,'0');
return isCorrect;
}
API Password Field
Bảng sau đây liệt kê các hàm tạo và phương thức của JPasswordField
. Bạn có thể xem thêm thông tin từ API Text Field qua bài viết Cách sử dụng Text Fields.
Hàm tạo/Phương thức | Mô tả |
---|---|
JPasswordField() JPasswordField(String) JPasswordField(String, int) JPasswordField(int) JPasswordField(Document, String, int) |
Tạo một trường password. Đối số int xác định số cột, đối số String chứa văn bản khởi tạo, đối số Document cung cấp model tùy chỉnh cho trường. |
char[] getPassword() | Trả về mật khẩu dưới dạng mảng các ký tự. |
void setEchoChar(char) char getEchoChar() |
Thiết lập hoặc lấy ký tự thay thế cho những ký tự đoạn người dùng điền vào. |
void addActionListener(ActionListener) void removeActionListener(ActionListener) (được định nghĩa trong JTextField ) |
Thêm hoặc bớt một action listener. |
void selectAll() (được định nghĩa trong JTextComponent ) |
Chọn tất cả các ký tự trong trường password. |