0

「パスワードを忘れた」機能を実装しています。Spring MVCとAjaxを使用していますが、トークンURLを使用してAjaxからSpringControllerメソッドを呼び出したいときに問題が発生します。私が持っているコードは次のようなものです:

スプリングコントローラー

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

トークンは、ユーザーがパスワードのリセットを要求したときにランダムに生成される一意のIDであり、電子メールを介して一時的なリンクを取得し、ユーザーを[パスワードのリセット]ページにリダイレクトします。

Ajax関数

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

Ajax呼び出しを行うと、404ページが見つかりませんというエラーが発生します。

注: 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ではなくブラウザでヒットして、問題がajaxにあるのかリクエストマッピングにあるのかを判断してください。ブラウザのRESTプラグインを試して、POSTを簡単にするか、action="resetPassword/1234-asdf-1234-asdfnewPasswordという名前の入力ボックスを使用してフォームをハードコーディングすることができます。
  • 次に、トークンを見て、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({
              type: "POST",
              url: "/absolutepath/resetPassword/" + token,
              data: "newPassword=" + password,    
              async: false,
              success: function(response){   

どのIDEを使用していますか?IntelliJのように、多くは、IDEからこれらのWebサービスをテストするためのRESTサービスツールをサポートしています。

于 2013-01-23T20:26:59.277 に答える
1

解決しました。AjaxURLの一部を削除する必要がありました。これで、Springコントローラーメソッドが起動し、パスワードのリセットが正常に機能するようになりました。

前:

 url: "./resetPassword/" + token,

後:

 url: "./" + token,

すべてのコメントと助けてくれてありがとう。

于 2013-01-23T20:35:42.980 に答える