如何在HandlerInterceptorAdapter中验证张贴表单中的一些字段



我正在编写基于HandlerInterceptorAdapter的CaptchaInterceptor。在preHandle方法中,我必须检查capcha值。如何从这个方法添加错误消息,并发送用户回表单与无效的cactha值,不丢失用户输入的数据?

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {
/*  Validate */
String kaptchaExpected = (String)request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
String kaptchaReceived = request.getParameter("j_kaptcha");
    if (!StringUtils.endsWithIgnoreCase(kaptchaReceived,kaptchaExpected))
    {
     // add errorMessage
     // reset request values?
     response.sendRedirect(request.getHeader("Referer"));
    return false;
    }
return true;
}

或者添加错误并向处理程序发送请求。在BindingResult对象控制器将以某种方式发现错误并发送所有数据。

开箱外,您需要将错误消息添加到会话中,然后在下一个请求的preHandle或posthhandle方法中,您需要检查会话以查看是否存在错误消息。

public void postHandle(HttpServletRequest request, HttpServletResponse response, 
                       Object handler, ModelAndView modelAndView) {
    //Best to put them in some sort of iterable, so your UI can iterate over them
    Object errorMessages = 
        request.getSession().getAttribute(ERROR_MESSAGES_CONSTANT);
    modelAndView.addObject("errorMessages", errorMessages);
}

在视图内部,你需要处理错误消息(如果存在的话)。

一旦完成,您将希望从会话中清除它(因此他们不会在每个页面上看到相同的消息)。

public void postHandle(HttpServletRequest request, HttpServletResponse response,
                       Object handler, ModelAndView modelAndView) {
  request.getSession().setAttribute(ERROR_MESSAGES_CONSTANT, null);
}

最新更新