java - 在 Java 类中使用 URL 参数
问题描述
我想制作一个基本的“忘记密码”系统,我为每个用户提供了一个随机生成的令牌并将其存储在数据库中。用户必须在表单上输入他的电子邮件,以请求密码重置链接。然后,他收到一封带有特定链接的电子邮件,例如:http://localhost:8080/login/reset-password.jsp?token=fd62566666910438486e76760952ea71d参数“token”检索与他在数据库中的电子邮件关联的令牌值。
现在,我的问题是,如何在获取 URL 中的令牌值时更新密码?
我试图从 URL 请求参数,但我不知道我在这里缺少什么,因为当我调试时它告诉我 reset_token 是 NULL,因此,什么都没有更新。请帮忙。
这是我的桌子:
CREATE TABLE user (
id bigint identity NOT NULL,
username varchar(50) NOT NULL,
email varchar(50) NOT NULL,
password varchar(50) NOT NULL,
attempts int DEFAULT 3,
state varchar(50) DEFAULT 'Active’,
reset_token varchar(50),
time_token TIMESTAMP,
PRIMARY KEY (id)
);
这是我的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) throws SQLException {
PreparedStatement ps = null;
try
{
if (con == null){
System.out.println("Failed connection");
} else {
ps = con.prepareStatement(
"UPDATE user SET password = ? WHERE reset_token = ?");
ps.setString(1,password);
ps.setString(2,token);
ps.executeUpdate();
if (!con.getAutoCommit()) {
con.commit();
}
}
}
catch (Exception e) {
e.printStackTrace(System.out);
}
finally {
if (ps != null) {
ps.close();
}
}
解决方案
因此,经过长时间的搜索,我发现 token 参数没有检索任何内容,因为在发布请求中,它从正文而不是 URL 获取值,所以我只是在表单中添加了一个隐藏输入,如下所示:
<input type="hidden" name="token" value="<%= request.getParameter("token")%>">
它工作得很好。希望这对将来的某人有所帮助。
推荐阅读
- css - 如何在 Firefox 中使用带有点值的背景大小
- r - 是否可以在 R 中创建所有对象的数据框?
- python - 使用python替换文本中的单词
- jython - 如何在同一个文件中读取最后一个值、增量和追加:Jython
- jsp - 如何在 Liferay DXP 7.3.10 GA1 中覆盖 update_password.jsp
- ios - ATT 会影响除广告跟踪之外的一般 Firebase 和谷歌分析吗?
- wordpress - MYSQL选择相邻记录/与易于选择的记录共享键的记录
- c++ - FFMPEG:“服务器回复中的传输不匹配”但 openRTSP 有效
- macos - 在我的 Mac 上使用 Mission Control 时,有时窗口会随机变为不可见
- amazon-web-services - AWS ECS 集群:创建第二个实例,移动容器