私のログインフォームは にあります/account/login
。この URL への GET 要求により、要求ハンドラーが呼び出さaccount/login
れ、論理ビュー名として返され、/WEB-INF/jsp/account/login.jsp
サービスが提供されます。
@RequestMapping(value="/account/login", method=RequestMethod.GET)
public String login()
{
return "account/login";
}
/account/login
my を呼び出すためのPOST 要求がUsernamePasswordAuthenticationFilter
あるため、ログイン フォームは (GET を介して) によって提供され、(POST を介して) に送信され/account/login
ます。
これはすべてうまくいきます。
ただし、ログインに失敗した場合は、HTTP リダイレクトを実行せず/WEB-INF/jsp/account/login.jsp
にサービスを提供したいと考えています。/account/login
/WEB-INF/jsp/account/login.jsp
私はSimpleUrlAuthenticationFailureHandler.onAuthenticationFailure()
次のようにオーバーライドしようとしました:
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException
{
request.getRequestDispatcher("account/login").forward(request, response);
}
ただし、これにより、不正なユーザー名/パスワードを に POST すると、404 応答が返されます/account/login
。
/WEB-INF/jsp/account/login.jsp
、/account/login.jsp
、および他の多くの組み合わせを に渡そうとしましたが、何も機能してServletRequest.getRequestDispatcher()
いないようです。
私が間違っていることはありますか?ディスパッチャが JSP 自体ではなく、リクエスト ハンドラにディスパッチしようとしているように感じますが、JSP ディスパッチ ワークフロー全体に精通しておらず、それを回避する方法を知ることができません。