2016-07-22 5 views
0

HTMLフォームを送信するとき:無限再帰フォームのポストに

 <form method="post" action="/login"> 
      <input class="inputLogin" type="text" name="username" value="" placeholder="Email" > 
      <input class="inputPassword" type="password" name="password" value="" placeholder="Password">  
      <br> 
      <input class="formButton" type="submit" name="commit" value="Login"> 
     </form> 

サーブレット:

@Override 
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
    String username = req.getParameter(USERNAME_PARAMETER); 
    String password = req.getParameter(PASSWORD_PARAMETER); 
    boolean authenticated = authService.authenticate(req.getSession(), username, password); 
    if (authenticated) { 
     resp.sendRedirect("/user/home-page"); 
    } else { 
     System.out.println("ELSE"); 
     req.setAttribute(ERR_ATTRIBUTE, "Invalid credentials!"); 
     req.getRequestDispatcher("/login").forward(req, resp); 
    } 
} 

私がフォームを送信すると、私はこのサーブレットとstackoverflowのを呼び出す無限再帰を取得します。

どこに問題がありますか?

答えて

0

POSTリクエストはすでにログインサーブレットを実行していますが、forward()を実行すると同じパラメータでdoPost操作が再び開始され、ループでスタックされます。 .forward()をスキップし、サーブレットが再度ログインフォームを再送信できるようにしてください。ユーザーが成功したログインに3回失敗した場合には、カウンタをそのままにして、別のページに.forward()するだけかもしれません。

関連する問題