我的登录表单位于/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 调度工作流程还不够熟悉,不知道如何解决这个问题。