在SQLite3

时间:2017-04-28 09:58:11

标签: java jquery sqlite authentication jdbc

我正在尝试创建一个基本的登录页面(不是专门针对网站),我使用SQLite3来存储用户名和密码。注册(注册)新用户名很简单,因为我只需要通过SQLite3的java连接器输入将值插入数据库。但是,登录需要我将输入的用户名和密码与数据库中的相应值进行比较。有没有办法在没有创建过程/函数的情况下进行这种比较,因为SQLite不支持它们?

如果还有其他方法可以通过java进行此操作,请告诉我代码应该是什么样的。

2 个答案:

答案 0 :(得分:0)

对于两者:JEE应用程序和最终的非JEE解决方案,您需要使用以下内容查询数据库:

select password from users where user = :user

对于JEE,它将由JEE容器完成,但无论如何都应该进行配置。

之后,您需要与用户提供的密码进行比较。

出于安全原因,建议在数据库中存储正确的散列密码以避免字典攻击。在存储之前和比较之前的散列场景中,您需要使用相同的算法处理给定的密码。

答案 1 :(得分:0)

ResultSet对象可用于存储从select查询中获取的结果集。通过传递属性名称,例如userPassword,可以通过调用结果集对象的getString函数将数据库密码存储到变量中。然后将此值与输入的密码进行比较以进行身份​​验证。以下是signIn方法的演示:

private boolean authenticate() {
    if (usernameField.getText().length() == 0
            || passwordField.getPassword().length == 0) {
        errorLabel.setText("Error! Please fill in the required fields.");
        errorLabel.setVisible(true);
    } else {          
        Connection connection = null;    // for establishing a connection to the database
        Statement statement = null;     // for querying the database
        try {
            Class.forName("org.sqlite.JDBC");
            connection = DriverManager.getConnection("jdbc:sqlite:Login.db");
            //Established Connection
            statement = connection.createStatement();
            // query to be executed
            String sqlQuery = "select * from login where username = '"
                    + usernameField.getText() + "'";
            // result of the executed query
            ResultSet queryResult = statement.executeQuery(sqlQuery);
            String databasePassword = null;       
            // Storing the password from the database
            if (queryResult.next()) {
                databasePassword = queryResult.getString("userpass");
            }
            String enteredPassword = new String(passwordField.getPassword()); 
            // Storing the entered password from the form
            if (enteredPassword.equals(databasePassword)) {
                return true;
                // User is now authenticated and you may enter your redirecting page code here
            } else {
                errorLabel.setText("Invalid username or password. Try again.");
                errorLabel.setVisible(true);
            }
            statement.close();
            connection.close();

        } catch (Exception e) {
            System.err.println(e.getClass().getSimpleName() + " : " + e.getMessage());
            System.exit(0);
        }
    }
    return false;
}

当方法返回true时,您可以将流重定向到另一个将用户登录到门户网站的方法。