我的登录表单位于/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";
}
POST 请求/account/login调用 my UsernamePasswordAuthenticationFilter,因此登录表单既由 (via GET) 提供,也由 (via POST) 提交/account/login。
这一切都很好。
但是,在登录失败的情况下,我希望/WEB-INF/jsp/account/login.jsp在不进行 HTTP 重定向的情况下获得服务,即将错误的用户名/密码发布到/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 调度工作流程还不够熟悉,不知道如何解决这个问题。