如何使用 SQL 数据库在 JSP 中执行简单的 email/password 验证?
How do I perform a simple email/password verification in JSP using a SQL database?
我有成功建立到 mySQL 数据库连接的代码。
String email, password; //assume these are already loaded with user-entered data.
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
return false;
}
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/main", "root", "password123");
} catch (SQLException e) {
return false;
}
//perform my database actions here///////////////
///////////////////////////////////////////////////
try {
conn.close();
} catch (SQLException e) {
return false;
}
我在上面的代码范围内有几个字符串,它们已经包含用户在登录页面上输入的电子邮件和密码。我需要在数据库中查找匹配的电子邮件地址,然后验证密码是否与用户在表单中输入的内容匹配。
我的 table 有 3 列:ID、电子邮件和密码。
我使用 sql workbench
将两行推入 table
1 | email@gmail.com | password1
2 | email2@gmail.com | password2
我假设纯粹SQL我必须做类似
的事情
SELECT * FROM users WHERE email LIKE 'email@gmail.com' AND password LIKE 'password1';
但我不太确定如何将这些 SQL 命令实际发送到数据库并使用 JSP 接收回信息。另外,我不完全确定我的 SQL 逻辑是验证密码的理想方式。我对上面 SQL 命令的想法是,如果数据库找到满足条件的任何行,那么 email/password 组合将被验证。不确定这是否是一个很好的方法。我不是在寻找最安全和最复杂的方式,我只是在寻找目前有意义的最简单的方式。我找到的每个教程似乎都有不同的做法,我有点困惑。
这是一个您可以使用我所做的示例(我假设连接 "conn" 是显而易见的):
PreparedStatement st = null;
ResultSet rec = null;
SprayJobItem item = null;
try {
st = conn.prepareStatement("select * from sprayjob where headerref=? and jobname=?");
st.setString(1, request.getParameter("joblistref"));
st.setString(2, request.getParameter("jobname"));
rec = st.executeQuery();
if (rec.next()) {
item = new SprayJobItem(rec);
}
} catch (SQLException ex) {
// handle any errors
ReportError.errorReport("SQLException: " + ex.getMessage());
ReportError.errorReport("SQLState: " + ex.getSQLState());
ReportError.errorReport("VendorError: " + ex.getErrorCode());
} catch (Exception ex) {
ReportError.errorReport("Error: " + ex.getMessage());
} finally {
// Always make sure result sets and statements are closed,
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
;
}
ps = null;
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
;
}
rs = null;
}
}
在你的情况下而不是 item = new SprayJobItem(rec);
您将拥有表明用户有效的代码,因为已找到记录。
我有成功建立到 mySQL 数据库连接的代码。
String email, password; //assume these are already loaded with user-entered data.
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
return false;
}
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/main", "root", "password123");
} catch (SQLException e) {
return false;
}
//perform my database actions here///////////////
///////////////////////////////////////////////////
try {
conn.close();
} catch (SQLException e) {
return false;
}
我在上面的代码范围内有几个字符串,它们已经包含用户在登录页面上输入的电子邮件和密码。我需要在数据库中查找匹配的电子邮件地址,然后验证密码是否与用户在表单中输入的内容匹配。
我的 table 有 3 列:ID、电子邮件和密码。
我使用 sql workbench
将两行推入 table1 | email@gmail.com | password1
2 | email2@gmail.com | password2
我假设纯粹SQL我必须做类似
的事情SELECT * FROM users WHERE email LIKE 'email@gmail.com' AND password LIKE 'password1';
但我不太确定如何将这些 SQL 命令实际发送到数据库并使用 JSP 接收回信息。另外,我不完全确定我的 SQL 逻辑是验证密码的理想方式。我对上面 SQL 命令的想法是,如果数据库找到满足条件的任何行,那么 email/password 组合将被验证。不确定这是否是一个很好的方法。我不是在寻找最安全和最复杂的方式,我只是在寻找目前有意义的最简单的方式。我找到的每个教程似乎都有不同的做法,我有点困惑。
这是一个您可以使用我所做的示例(我假设连接 "conn" 是显而易见的):
PreparedStatement st = null;
ResultSet rec = null;
SprayJobItem item = null;
try {
st = conn.prepareStatement("select * from sprayjob where headerref=? and jobname=?");
st.setString(1, request.getParameter("joblistref"));
st.setString(2, request.getParameter("jobname"));
rec = st.executeQuery();
if (rec.next()) {
item = new SprayJobItem(rec);
}
} catch (SQLException ex) {
// handle any errors
ReportError.errorReport("SQLException: " + ex.getMessage());
ReportError.errorReport("SQLState: " + ex.getSQLState());
ReportError.errorReport("VendorError: " + ex.getErrorCode());
} catch (Exception ex) {
ReportError.errorReport("Error: " + ex.getMessage());
} finally {
// Always make sure result sets and statements are closed,
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
;
}
ps = null;
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
;
}
rs = null;
}
}
在你的情况下而不是 item = new SprayJobItem(rec);
您将拥有表明用户有效的代码,因为已找到记录。