不建议使用JPasswordField.getText()

想得到用户在 Java Swing 中的 JPasswordField 控件中输入的密码内容,应该使用 JPasswordField.getPassword() ,而不是 JPasswordField.getText() 。因为安全的原因,JavaDoc 中就是如此建议的:

For security reasons, this method is deprecated. Use the getPassword method instead.


getPassword() 与 getText() 的差别在于 getPassword 返回的是一个 char[] ,getText() 返回一个 String 。

咋一想,要是有人想查看内存( 包括物理主存与交换文件 )里的内容,String 与 char[] 在安全上是没什么区别的。

但是两者最大的区别是不可变性。 String 是一个不可变的对象。一旦被分配内存空间,String 里的字符就不可改变了。如此,这个 String 对象还会在你使用完它后,还会内存中停留上一段时间。然而 char[] 就不一样了,你可以在使用完这个字符数组后,把所有的字符改成 '/0'。
public LoginRegisterApp() { setTitle("登录/注册"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 200); setLayout(new GridLayout(3, 2)); JLabel usernameLabel = new JLabel("用户名:"); JLabel passwordLabel = new JLabel("密码:"); usernameField = new JTextField(); passwordField = new JPasswordField(); loginButton = new JButton("登录用户存档"); registerButton = new JButton("创建用户存档"); loginButton.addActionListener(e -> { String username = usernameField.getText(); String password = passwordField.getText(); System.out.println(username); String sql = "SELECT * FROM `use` WHERE useName = ? && usePassword = ?"; Use use = (Use) DBUtil.getObject(Use.class, sql, username, password); // 在这里执行登录操作 if (use != null) { JOptionPane.showMessageDialog(LoginRegisterApp.this, "存档成功"); dispose(); } else { JOptionPane.showMessageDialog(LoginRegisterApp.this, "用户不存在,请重新登录!"); } }); registerButton.addActionListener(e -> { String username = usernameField.getText(); String password = passwordField.getText(); String sql = "SELECT * FROM `use` WHERE useName = ?"; Use use = (Use) DBUtil.getObject(Use.class, sql, username); // 在这里执行注册操作 if (use != null) { JOptionPane.showMessageDialog(LoginRegisterApp.this, "该用户已存在,请重新操作!"); } else { if (passwordField.getText().isEmpty()) { DBUtil.executeUpdate("INSERT INTO `use`(useName)VALUES(?)", username); } else { DBUtil.executeUpdate("INSERT INTO `use`(useName,usePassword)VALUES(?,?)", username, password); } JOptionPane.showMessageDialog(LoginRegisterApp.this, "存档成功"); dispose(); } }); add(usernameLabel); add(usernameField); add(passwordLabel); add(passwordField); add(loginButton); add(registerButton); setVisible(true); }如何在另一个函数中得到use对象
最新发布
07-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值