5

我已经成功地将我的 Java 应用程序连接到 MySQL,然后我希望用户输入他们的用户名和密码。然后它会向 MySQL 发送一个查询并使用该用户名查找一个位置,然后将给出的密码与数据库中的密码进行比较。在大多数情况下,这是可行的。假设用户名是“ABC”,密码是“def”。如果提示输入用户名并输入“ABC def”,则表示成功,密码为“def a”。我相信问题出在 rs.next() 上,它只检查空格前的任何文本。

任何解决方案的想法?

    String databaseUsername = "";
    String databasePassword = "";

    // Check Username and Password
    System.out.print("Enter Username: ");
    String name = sc.next();
    System.out.print("Enter Password: ");
    String password = sc.next();

            // Create SQL Query
    Statement stmt = connection.createStatement();
    String SQL = "SELECT * FROM users WHERE users_name='" + name + "' && users_password='" + password+ "'";

    ResultSet rs = stmt.executeQuery(SQL);

            // Check Username and Password
    while (rs.next()) {
        databaseUsername = rs.getString("users_name");
        databasePassword = rs.getString("users_password");
    }

    if (name.equals(databaseUsername) && password.equals(databasePassword)) {
        System.out.println("Successful Login!\n----");
    } else {
        System.out.println("Incorrect Password\n----");
    }
4

1 回答 1

3

如果返回一行,则该语句ResultSet已经检查了用户名和密码。SQL您无需再次检查。此外,您应该建立一个不能多次使用相同用户名的系统。(Unique在数据库中制作或键入它)

此外,使用准备好的语句和散列密码来避免注入和其他攻击。

于 2013-03-01T19:10:19.653 回答