Nat*_*der 4 java passwords swing jpasswordfield
我正在为一家虚拟公司设计一个登录系统,现在我所拥有的只是主要登录,需要大量的清理工作.下面是我的登录处理程序.
private class LoginButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(_uid.getText().equalsIgnoreCase("Nathan") && _pwd.getText().equals("password")) {
JOptionPane.showMessageDialog(null, "Congratulations on logging in!");
} else {
JOptionPane.showMessageDialog(null, "Error on login!");
}
}
}
Run Code Online (Sandbox Code Playgroud)
原样,这种方法非常好,但是当我改为它时
_pwd.getPassword.equals("password")
Run Code Online (Sandbox Code Playgroud)
当一切输入正确时,它会直接指向else语句.这有什么不对?完整的程序如下.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Main extends JFrame {
private static final int HEIGHT = 90;
private static final int WIDTH = 400;
JTextField _uid = new JTextField(10);
JPasswordField _pwd = new JPasswordField(10);
JButton _login = new JButton("Login");
JButton _reset = new JButton("Reset");
public Main() {
super("Login - Durptech");
Container pane = getContentPane();
setLayout(new FlowLayout());
add(new JLabel("User ID:"));
add(_uid);
add(new JLabel("Password:"));
add(_pwd);
add(_login);
_login.addActionListener(new LoginButtonHandler());
add(_reset);
_reset.addActionListener(new ResetButtonHandler());
/*if(_uid.getText().equals("") && _pwd.getText().equals("")) {
_login.setEnabled(false);
} else {
_login.setEnabled(true);
}*/
setSize(WIDTH, HEIGHT);
setResizable(false);
setLocation(500, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
private class ResetButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
_uid.setText("");
_pwd.setText("");
_uid.requestFocusInWindow();
}
}
private class LoginButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(_uid.getText().equalsIgnoreCase("Nathan") && _pwd.getText().equals("password")) {
JOptionPane.showMessageDialog(null, "Congratulations on logging in!");
} else {
JOptionPane.showMessageDialog(null, "Error on login!");
}
}
}
public static void main(String[] args) {
new Main();
}
}
Run Code Online (Sandbox Code Playgroud)
Hov*_*els 12
您将希望很好地了解API,使其成为您最好的朋友.解决这个问题的关键是看看有什么JPasswordField#getPassword()
回报.提示1:它不是字符串.提示2:您可能希望使用java.util.Arrays类方法解决此问题.
getPassword不返回String的原因是因为Java处理字符串的方式 - 它可以将它们存储在字符串池中,允许字符串在程序中挂出的时间超出预期,并使字符串可以通过以下方式检索:恶意软件 - 您不希望发生密码的事情.使用char数组更安全.
顺便说一句,不要使用JPasswords弃用getText()
方法或使用new String(char[])
构造函数将char数组更改为String,因为这些都返回String,它们不安全.
bla*_*nda 11
JPasswordField.getPassword()
返回a char []
而不是a String
.这是为了安全起见.你应该比较数组中的字符而不是查看char [] .equals(一个字符串);
password.getPassword()
返回一个char [],而char []不等于字符串.所以你需要将它与char []进行比较:
if (Arrays.equals(password.getPassword(), new char[]{'p','a','s','s','w','o','r','d'}))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
30371 次 |
最近记录: |