簡體   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