JCaptcha在apache+tomcat下验证失效问题

JCaptcha使用当前SessionId来做当前验证码的key,但是在apache+tomcat集群里,sessionId是不同的,会出现验证失败问题,解决方法: 

继承JCaptcha的SimpleImageCaptchaServlet类

1.重写doGet方法,当获取验证码时,将sessionId放入到session中

2.重写validateResponse验证方法,从session中获取sessionId,验证之...

代码如下:

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;
	}

}

 

你可能感兴趣的:(session,验证码,JCAPTCHA)