Есть ли другой лучший способ получить и сравнить учетные данные базы данных с Java?

0

Я пытаюсь создать простую систему входа с java, используя базу данных mySQl.

Я сохранил идентификатор пользователя и пароль в таблице базы данных. Я придумал способ входа в систему, который, кажется, работает хорошо, но я не уверен, что это правильный способ сделать это, поскольку я не мог найти ни одного онлайн-источника для систем входа в систему.

Мои шаги:

  1. получение ввода от пользователя (идентификатор пользователя и пароль).
  2. Используя метод fetch(), который я создал для итерации по таблице и поиска этого конкретного идентификатора.
  3. Если он найден, получите пароль и баланс из таблицы и сохраните их в переменных.
  4. Наконец сравните пароль, который я ранее получил от базы данных и сохранил в переменной с паролем, введенным пользователем.

Я хорошо знаю, что хранение паролей в текстовом виде является большой дырой в безопасности, но на данный момент я просто пытаюсь узнать, как использовать данные из БД в моей программе java

Это мой код:

public class firstjava extends Database {

    public static int UID = 0;
    public static String password;
    public static int BAL;
    public static String upassword;

    static void fetch(int userid) throws SQLException {
        String query = "SELECT * FROM Persons";
        Statement st = con.createStatement();

        ResultSet rs = st.executeQuery(query);

        while (rs.next()) {
            int ID = rs.getInt("pid");
            if (ID == UID) {
                password = rs.getString("password");
                BAL = rs.getInt("balance");
            }

        }
        if (upassword.equals(password)) {
            System.out.println("you are now logged in");
        } else {
            System.out.println("incorrect password");
        }
        st.close();
    }

    public static void menu() throws IOException, SQLException {
        Scanner atm = new Scanner(System.in);
        System.out.println("enter your account number");
        UID = atm.nextInt();
        System.out.println("enter your account password");
        upassword = atm.next();
        fetch(UID);
    }

    public static void main(String[] args) throws IOException, SQLException {
        Database db = new Database();
        try {
            db.connect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        menu();
        db.close();
    }
}
  • 0
    Использование метода fetch (), который я создал, для итерации по таблице и нахождения этого конкретного идентификатора. Это может быть тяжелой операцией, особенно если у вас тысячи пользователей (= тысячи итераций). Вместо этого используйте WHERE для выбора пользователей с определенным именем пользователя, таким образом цикл while будет выполняться не более 1 раза (учитывая, что у вас нет дубликатов). Вы также можете фильтровать по имени пользователя и паролю, таким образом у вас будет один запрос, который проверяет, существует ли пользователь и совпадает ли пароль.
  • 0
    Спасибо за ваше предложение @BackSlash. Я выполнил запрос SELECT WHERE, используя мой набор результатов, и использовал оператор if, чтобы проверить, является ли мой набор результатов истинным, затем получил пароль.
Теги:
database
passwords
login

2 ответа

1
Лучший ответ

Вы можете напрямую передать userId как параметр в свой запрос и получить пароль и баланс из таблицы DB, тогда вы должны сравнить пароль с введенным пользователем паролем.

static void fetch(int userid) throws SQLException
{
    PreparedStatement ps = null;
    ResultSet rs = null;

    String query = "SELECT * FROM Persons where pid = ?";
    PreparedStatement ps = con.prepareStatement(query);
    ps.setInt(1,userid);
    rs = ps.executeQuery(); //instantiate rs with executed query

    while(rs.next()) {
        password = rs.getString("password");
        BAL = rs.getInt("balance");
    }   
    if(upassword.equals(password)) {
        System.out.println("you are now logged in");
    } else {
        System.out.println("incorrect password");
    }
    rs.close();
    ps.close();    
}
  • 0
    спасибо за предложение
  • 0
    Добро пожаловать @ Jix Sas У вас это сработало? Я имею в виду, вы нашли, что это ответ, который вы искали?
0

"Если бы я мог видеть дальше, то только потому, что я стоял на плечах гигантов".

Вот гигант:

https://spring.io

Вы найдете что-то вроде:

Optional<User> r = userRepo.findByName(name);
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
if (passwordEncoder.matches(password, user.getPassword())) {
   // ...
}
  • 0
    на данный момент я просто пытаюсь узнать, как использовать данные из БД в моей java-программе - «использовать пружину» здесь не является хорошим предложением IMO, особенно если OP новичок.
  • 0
    @ BackSlash прав, но спасибо за предложение, которое я мог бы использовать весной в будущем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню