在Java类中使用URL参数

在Java类中使用URL参数,java,servlets,token,Java,Servlets,Token,我想建立一个基本的“忘记密码”系统,我给每个用户一个随机生成的令牌,并将其存储在数据库中。用户必须在表单上输入其电子邮件以请求重置密码的链接。然后,他收到一封带有特定链接的电子邮件,如:其中参数“token”检索数据库中与他的电子邮件关联的令牌值 现在,我的问题是,如何在获取URL中的令牌值的同时更新密码? 我试图从URL请求参数,但我不知道这里缺少了什么,因为当我调试时,它会显示reset\u标记为NULL,因此,不会更新任何内容。请帮忙 这是我的桌子: CREATE TABLE user (

我想建立一个基本的“忘记密码”系统,我给每个用户一个随机生成的令牌,并将其存储在数据库中。用户必须在表单上输入其电子邮件以请求重置密码的链接。然后,他收到一封带有特定链接的电子邮件,如:其中参数“token”检索数据库中与他的电子邮件关联的令牌值

现在,我的问题是,如何在获取URL中的令牌值的同时更新密码?

我试图从URL请求参数,但我不知道这里缺少了什么,因为当我调试时,它会显示reset\u标记为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参数没有检索任何内容,因为在post请求中,它从主体而不是URL获取值,所以我只是在表单中添加了一个隐藏输入,如下所示:

<input type="hidden" name="token" value="<%= request.getParameter("token")%>">

它工作得很好。希望这对将来的人有所帮助