mysql—有没有其他更好的方法来获取数据库凭据并与java进行比较?

o8x7eapl  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(385)

我正在尝试使用mysql数据库用java创建一个简单的登录系统。
我已将用户id和密码存储在数据库表中。我想出了一个登录的方法,这似乎工作得很好,但我不确定这是否是正确的方法,因为我找不到任何登录系统的在线来源。
我的步骤是:
从用户获取输入(用户id和密码)。
使用我创建的fetch()方法遍历表并查找这个特定的id。
如果找到了,从表中获取密码和余额,并将它们存储在变量中。
最后,将我之前从数据库获得并存储在变量中的密码与从用户输入的密码进行比较。
我很清楚,以纯文本形式存储密码是一个很大的安全漏洞,但目前我只是在尝试学习如何在java程序中使用db中的数据
这是我的密码:

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();
    }
}
vsikbqxv

vsikbqxv1#

您可以直接将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();    
}
9nvpjoqh

9nvpjoqh2#

“如果我能看得更远,那只是因为我站在巨人的肩膀上。”
巨人来了:
https://spring.io
你会发现:

Optional<User> r = userRepo.findByName(name);
BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
if (passwordEncoder.matches(password, user.getPassword())) {
   // ...
}

相关问题