当前位置: 首页 > 知识库问答 >
问题:

将参数从get传递到post方法

郭凯
2023-03-14

我正在为webste构建一个功能,用户可以在其中重置密码。他收到一封电子邮件,其中包含URL中生成的令牌。单击此链接时,用户将被发送到/Reset页面。该页的Get方法如下:

 @RequestMapping(value = "/reset", method = RequestMethod.GET)
public ModelAndView displayResetPasswordPage(ModelAndView modelAndView, @ModelAttribute User user, @RequestParam("token") String token) {

    User u = userService.findByResetToken(token);


    if (u == null) {
        modelAndView.setViewName("error/404");
        return modelAndView;
    } else {
        modelAndView.addObject("token", token);
        modelAndView.setViewName("resetPassword");
        return modelAndView;
    }
}
 @RequestMapping(value = "/reset", method = RequestMethod.POST)
public ModelAndView setNewPassword(ModelAndView modelAndView, @RequestParam Map<String, String> requestParams, @ModelAttribute User user, BindingResult bindingResult,  RedirectAttributes redir) {

    System.out.println("token: " + requestParams.get("token"));
    User u = userService.findByResetToken(requestParams.get("token"));

 //   User u = userService.findByEmail(user.getEmail());       


    if (u != null) {

        User updatedUser = userService.updateUserPassword(user);

        modelAndView.addObject("User",updatedUser);
        modelAndView.setViewName("redirect:login");
        return modelAndView;

    } else {
        modelAndView.setViewName("resetPassword");
    }

    return modelAndView;
}
<div class="wrapper">
<form class="form-signin" th:action="@{/reset}" method="post" th:object="${user}">
    <h2 class="form-signin-heading">Reset wachtwoord</h2>
    <input type="hidden" name="token" th:value="*{resetToken}"/>       
    <div class="form-group">
        <input type="password" th:field="*{encryptedPassword}" id="password" class="form-control input-lg"
               placeholder="Password" tabindex="3"/>

    <div class="form-group">
        <input type="password" th:field="*{matchingPassword}" id="password_confirmation"
               class="form-control input-lg" placeholder="Confirm Password" tabindex="4"/>
    </div>

    <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6">
            <input type="submit" class="btn btn-secondary" value="Registreer"/>
        </div>
    </div>
</form>

共有1个答案

刘高驰
2023-03-14

这可以通过使用flash作用域来实现,该作用域允许您的令牌在重定向时幸存下来。您可以通过以下方法来实现:

  1. 使第一个控制器方法通过重定向
  2. 访问第二个控制器方法
  3. 在第一个控制器方法上使用RedirectAttributes并将令牌显式添加到RedirectAttributes中作为Flash属性

看一下有关RedirectAttributes的文档。

 类似资料:
  • 问题内容: 我被困在这个我无法完成的非常基本的表单中,我想用文本输入和两个选择控件构建一个搜索表单,并带有一个接受3个参数的路由,这个问题是当我提交形式,它用问号而不是Laravel方式映射参数, 标记 路线 当我提交表格时,将我重定向到 在没有Javascript的情况下,如何使用Laravel方式将这些参数传递给我的路线!:D 问题答案: 最简单的方法就是接受传入的请求,然后在Controll

  • 问题内容: 我想将值传递给javascript。如果可能的话,我该怎么办?如何在后备bean中接收它们? 问题答案:

  • 问题内容: 我们已经设置了一些参数来在Jenkins中执行构建(使用简单的“参数化构建”设置)。作业被设置为Maven测试。有没有办法以编程方式将这些参数传递到我们的Java代码中?我们需要基于通过Jenkins设置的参数来执行某些更新功能。 问题答案: 是的,您可以通过Maven执行将Jenkins参数传递给Java代码,如下所示: 请注意, $ JOB_PARAM_1 将捕获Jenkins上设

  • 问题内容: 我使用window.open方法打开了带有参数的新站点,我必须通过post方法来传递它。我找到了解决方案,但不幸的是它不起作用。这是我的代码: 接下来,我创建数组: 并通过以下方式调用函数: 但是,当我单击此按钮时,站点test.asp为空(当然,我尝试获取传递值- )。 我怎么解决这个问题,为什么我不能获得通过值? 问题答案: 无需将表单写入新窗口(要用HTML代码中的值进行编码就很

  • 我对JSP/servlets相当陌生,我一直在研究一些东西,它已经工作了一段时间。我有一个名为'telgir.jsp'的jsp,我从这个jsp向一个名为'tel Kayit'的servlet传递一个URL参数。 在LocalHost上运行时JSP页面的一个示例URL: 当我在servlet中接收到参数时,参数发生了变化,因此无法正确地对其进行解码并获得结果。根据我的研究,我意识到“%”符号使我的代