从AuthenticationFailureHandler发送Spring Form到Controller并创建BindingResult

时间:2013-08-01 09:22:22

标签: spring-security

我是Spring Security的开发用户身份验证。

我想在Controller方法中通过@Valid注释获取Spring Form参数。首先,执行Spring安全性,然后,我需要知道将AuthenticationFailureHandler中的Login对象发送到Controller方法。

之后,在Controller方法中我需要创建BindingResult来模拟jsp Spring Form错误功能。

现在我在AuthenticationFailureHandler和Controller方法中有了这段代码。

public class AuthFailureHandler implements AuthenticationFailureHandler {

    @Override
    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException ae) throws IOException, ServletException {

        Login login = new Login();

        login.setType(request.getParameter("type"));
        login.setEmail(request.getParameter("email"));
        login.setPassword(request.getParameter("password"));

        request.setAttribute("login", login);

        response.sendRedirect(response.encodeRedirectURL("./login/error"));
    }
}

在Controller方法

@RequestMapping("/login/error")
public String loginError(Model model, @Valid Login login, BindingResult result) {

    String message = this.messageSource.getMessage(
            "NoAuth.loginManager",
            null,
            LocaleContextHolder.getLocale());

    ObjectError error = new ObjectError("general", message);

    result.addError(error);

    model.addAttribute("login", new Login());

    return "home";
}

0 个答案:

没有答案