Java 在SQLite3中不使用过程验证登录页面
我正在尝试创建一个基本的登录页面(不是专门针对网站的),并使用SQLite3存储用户名和密码。注册一个新用户名很简单,因为我只需要通过SQLite3的java连接器输入并插入值到数据库中。但是,登录要求我将输入的用户名和密码与其在数据库中对应的值进行比较。有没有办法在不创建过程/函数的情况下进行比较,因为SQLite不支持它们Java 在SQLite3中不使用过程验证登录页面,java,jquery,sqlite,authentication,jdbc,Java,Jquery,Sqlite,Authentication,Jdbc,我正在尝试创建一个基本的登录页面(不是专门针对网站的),并使用SQLite3存储用户名和密码。注册一个新用户名很简单,因为我只需要通过SQLite3的java连接器输入并插入值到数据库中。但是,登录要求我将输入的用户名和密码与其在数据库中对应的值进行比较。有没有办法在不创建过程/函数的情况下进行比较,因为SQLite不支持它们 如果有其他方法可以通过java实现这一点,请告诉我代码应该是什么样子。对于JEE应用程序和最终非JEE解决方案,您需要使用以下内容查询数据库: select passwo
如果有其他方法可以通过java实现这一点,请告诉我代码应该是什么样子。对于JEE应用程序和最终非JEE解决方案,您需要使用以下内容查询数据库:
select password from users where user = :user
对于JEE,它将由JEE容器完成,但无论如何都应该进行配置
之后,您需要与用户提供的密码进行比较
出于安全原因,建议在数据库中正确存储哈希密码,以避免字典攻击。在散列方案中,在存储和比较之前,您需要使用相同的算法处理给定密码。可以使用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时,您可以将流重定向到另一个方法,该方法将用户登录到门户。为什么需要存储过程?你可以查询用户数据,是吗?