JCaptcha使用当前SessionId来作当前验证码的key,可是在apache+tomcat集群里,sessionId是不一样的,会出现验证失败问题,解决方法: java
继承JCaptcha的SimpleImageCaptchaServlet类apache
1.重写doGet方法,当获取验证码时,将sessionId放入到session中tomcat
2.重写validateResponse验证方法,从session中获取sessionId,验证之...session
代码以下:ide
public class JcaptchaExtendServlet extends SimpleImageCaptchaServlet { /** * */ private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { super.doGet(httpServletRequest, httpServletResponse); // 将sessionId放入到session中,解决apache+tomcat集群sessionId不同,验证问题 httpServletRequest.getSession().setAttribute( SessionKey.CAPTCHA_SESSIONID.key(), httpServletRequest.getSession().getId()); } public static boolean validateResponse(HttpServletRequest request, String userCaptchaResponse) { if (request.getSession(false) == null) return false; boolean validated = false; try { validated = service.validateResponseForID( (String) request.getSession().getAttribute( SessionKey.CAPTCHA_SESSIONID.key()), userCaptchaResponse).booleanValue(); } catch (CaptchaServiceException e) { e.printStackTrace(); } return validated; } }