0

我正在实施“忘记密码”功能。我正在使用 Spring MVC 和 Ajax,但是当我想使用令牌 url 通过 Ajax 调用 spring 控制器方法时遇到了一些麻烦。我的代码是这样的:

弹簧控制器

@RequestMapping(value="/resetPassword/{token}", method = RequestMethod.POST)
public @ResponseBody String doResetPassword(@PathVariable("token") String tokenID, 
        @RequestParam String newPassword, HttpServletRequest request) { ... }

令牌是用户请求重置密码并通过电子邮件获得临时链接时随机生成的唯一 ID,该链接将他/她重定向到重置密码页面。

阿贾克斯函数

         $.ajax({
              type: "POST",
              url: "./resetPassword/" + token,
              data: "newPassword=" + password,    
              async: false,
              success: function(response){               
                 ...  

当我进行 Ajax 调用时,我收到404 Page Not Found错误。

注意: URL 格式有效。我已经使用了./
显示重置密码表单的控制器方法的其他 Ajax 功能,如下所示:

@RequestMapping(value="/resetPassword/{token}")
public String showResetPasswordPage(Model model, @PathVariable("token") String token){
    model.addAttribute("token", token);
    return "account/resetPassword";
}

当用户实际单击按钮(输入新密码后)时,先前的请求方法会出现问题。

4

4 回答 4

1

如果不需要相对路径,请尝试删除第一个点,并将路径设为绝对路径;

   $.ajax({
              type: "POST",
              url: "/absolutepath/resetPassword/" + token,
              data: "newPassword=" + password,    
              async: false,
              success: function(response){   

您使用的是哪个 IDE?许多,比如 IntelliJ,支持一个 rest 服务工具来从你的 IDE 测试这些 web 服务。

于 2013-01-23T20:26:59.277 回答
1

简化。将其分解并分别验证每个部分,然后将它们放在一起。

  • 尝试先使用浏览器而不是 ajax 来确定您的问题是在 ajax 中还是在请求映射中。您可以为您的浏览器尝试一个 rest 插件,以使其更容易发布,或者只是硬编码一个表单action="resetPassword/1234-asdf-1234-asdf和一个名为 newPassword 的输入框。
  • 然后,查看令牌,看看是否有需要进行 URL 编码的字符。
  • 确保令牌不为空(即,它从 JSP 模型正确填充到 javascript 变量中。
  • 然后在 ajax 中对 URL 进行硬编码,以确保它可以正常工作。(我怀疑您可以删除./resetPassword 前面的)
  • ???
  • 利润。
于 2013-01-23T19:54:40.963 回答
1

编辑: 尝试编码 URL:

url: "./resetPassword/" + encodeURIComponent(token),
于 2013-01-23T19:54:51.973 回答
1

解决了。我不得不删除部分 Ajax url。现在启动了 Spring 控制器方法,并且密码重置现在工作正常。

前:

 url: "./resetPassword/" + token,

后:

 url: "./" + token,

谢谢大家的意见和帮助。

于 2013-01-23T20:35:42.980 回答