我正在编写基于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中,对象控制器会以某种方式找到错误并将所有数据发回。
答案 0 :(得分:0)
开箱即用,您需要将错误消息添加到会话中,然后在下一个请求的preHandle或postHandle方法内部,您需要检查会话以查看是否存在错误消息。
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);
}