繁体   English   中英

Java和MySQL - 创建登录身份验证

[英]Java & MySQL - Create a login authentication

我已成功将我的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----");
    }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM