从密码字段获取文本

Sum*_*ale 5 java

您好我正在尝试在java netbeans IDE中创建一个登录表单.我的目标是创建多个用户ID及其各自的密码.我已经给userID和passwordField提供了文本字段以获取密码,但问题是我想从密码字段中获取文本而我无法得到它显示一些错误我认为语法存在一些问题我的研究是如下可以有任何解决方案吗?需要你的帮助

private void lb_loginMouseClicked(java.awt.event.MouseEvent evt) {                                      
       DBUtil util = new DBUtil();
       String value1=tb_uid.getText();
       String value2=tb_pwd.getPassword();
       String user1="";
       String pass1="";
       try {

            Connection con = util.getConnection();
            PreparedStatement stmt = con.prepareStatement("SELECT * FROM login where username='"+value1+"' && password='"+value2+"'");
            ResultSet res = stmt.executeQuery();
            res = stmt.executeQuery();
            while (res.next()) {
                user1 = res.getString("username");
                pass1 = res.getString("password");
            }
            if (value1.equals(user1) && value2.equals(pass1)) {
            JOptionPane.showMessageDialog(this,"correct");
            }
            else{
            JOptionPane.showMessageDialog(this,"Incorrect login or password","Error",JOptionPane.ERROR_MESSAGE);
            }
            JOptionPane.showMessageDialog(null, "COMMITED SUCCESSFULLY!");
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());

        }

    }  
Run Code Online (Sandbox Code Playgroud)

小智 6

String pwd = new String(jPasswordField1.getPassword());
Run Code Online (Sandbox Code Playgroud)

选项1:

jTextField1.setText(""+pwd);
Run Code Online (Sandbox Code Playgroud)

选项2:

System.out.println(""+pwd);
Run Code Online (Sandbox Code Playgroud)


小智 5

使用此代码:

String password = String.valueOf(jPasswordField.getPassword());
Run Code Online (Sandbox Code Playgroud)

JPasswordField被加密,但如果你使用String.valueOf它会转换成字符为String。


Rei*_*eus 3

value2是 char 数组,因此进行String串联将导致String数组的表示,而不是String内容本身最终出现在 SQL 中。你可以替换

PreparedStatement stmt = con.prepareStatement("SELECT * FROM login where username='"+value1+"' && password='"+value2+"'");
Run Code Online (Sandbox Code Playgroud)

PreparedStatement stmt = con.prepareStatement("SELECT * FROM login where username='"+value1+"' AND password='" + new String(value2) + "'");
Run Code Online (Sandbox Code Playgroud)

相似地

if (value1.equals(user1) && value2.equals(pass1)) {
Run Code Online (Sandbox Code Playgroud)

需要是

if (value1.equals(user1) && pass1.equals(new String(value2)) {
Run Code Online (Sandbox Code Playgroud)

不过,最好使用PreparedStatement占位符来防止SQL 注入攻击:

PreparedStatement stmt = con.prepareStatement("SELECT * FROM login where username=? AND password=?);
stmt.setString(1, value1);
stmt.setString(2, new String(value2));
Run Code Online (Sandbox Code Playgroud)

注意:这不是一种安全的密码查找方式,哈希比较会相对更安全。