我正在尝试创建基本的密码重置系统。我正在为每个用户创建一个唯一的令牌,存储在数据库中并在url中检索该令牌值,例如:http://localhost:8080/login/reset-password.jsp?token=0d1eaa1a-869c-4f40-8437-a3cdaeddf497
这里的问题是我正在尝试更新数据库中的密码,但是该值未更新。它显示密码已更改,但是数据库中没有任何反应。请帮助。
这是我的servlet:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String password = request.getParameter("password");
String token = request.getParameter("token");
ForgotPasswordHandler.UpdatePassword(password, token);
String message = "Password changed!";
request.setAttribute("message", message);
request.getRequestDispatcher("reset-password.jsp?token=" + token).forward(request, response);
}
这是我在ForgotPasswordHandler.java类中的方法:
public static void UpdatePassword(String password, String token) {
try
{
if (con == null){
System.out.println("Failed connection");
}else{
PreparedStatement ps = con.prepareStatement(
"UPDATE user SET password = ? WHERE reset_token = ?");
ps.setString(1,password);
ps.setString(2,token);
ps.executeUpdate();
ps.close();
}}
catch (Exception e) {
e.printStackTrace(System.out);
}
}
您的连接可能已关闭autoCommit。如果这是问题,您可以使用以下代码进行修复:
if (con.getAutoCommit()) {
con.commit();
}
要注意的另一件事是,如果对ps.executeUpdate()的调用失败,则不会清除准备好的语句。为了避免该问题,请将“ close”移到“ finally”块附近。