验证码生成组件--JCaptcha的使用(一)

2014-11-24 07:44:36 · 作者: · 浏览: 0

以下为项目中所用代码,文笔有限,直接上代码。

所需jar包:

\

是否需要其他依赖包,不详


web.xml

  
     
   
    Jcaptcha
   
     
   
    com.bkgd.cms.servlet.JcaptchaServlet
   

  

  
     
   
    Jcaptcha
   
     
   
    /http://blog.csdn.net/itmyhome1990/article/details/captcha.svl
   

  

需要一个服务类 生成Image

package com.bkgd.cms.servlet;

import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.log4j.Logger;
import com.octo.captcha.service.CaptchaServiceException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

@SuppressWarnings("serial")
public class JcaptchaServlet extends HttpServlet {
	public static final String CAPTCHA_IMAGE_FORMAT = "jpeg";

	private static final Logger log = Logger.getLogger(JcaptchaServlet.class);

	@Override
	public void init() throws ServletException {
	}

	/**
	 * @step1 本方法使用Jcaptcha工具生成img图片,并输出到客户端
	 * @step2 将来在用户提交的action中插入下面语句进行验证码的校验:Boolean isResponseCorrect =
	 *        captchaService.validateResponseForID( captchaId, "");
	 **/
	@Override
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		byte[] captchaChallengeAsJpeg = null;
		ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
		try {
			// 借助于HttpSession ID存储Captcha ID,开发者也可以借助于其他惟一值
			String captchaId = request.getSession().getId();
			// 获得GMailEngine使用的图片内容
			BufferedImage challenge = JCaptchaServiceSingleton.getInstance().getImageChallengeForID(captchaId, request.getLocale());
			// 输出JPEG格式
			JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(jpegOutputStream);
			jpegEncoder.encode(challenge);
		} catch (IllegalArgumentException e) {
			log.error(e);
			response.sendError(HttpServletResponse.SC_NOT_FOUND);
			return;
		} catch (CaptchaServiceException e) {
			log.error(e);
			response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
			return;
		}
		captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
		response.setHeader("Cache-Control", "no-store");
		response.setHeader("Pragma", "no-cache");
		response.setDateHeader("Expires", 0);
		// 输出JPEG图片
		response.setContentType("image/jpeg");
		ServletOutputStream responseOutputStream = response.getOutputStream();
		responseOutputStream.write(captchaChallengeAsJpeg);
		responseOutputStream.flush();
		responseOutputStream.close();
	}
}

JCaptchaServiceSingleton

package com.bkgd.cms.servlet;

import com.octo.captcha.service.captchastore.FastHashMapCaptchaStore;
import com.octo.captcha.service.image.DefaultManageableImageCaptchaService;
import com.octo.captcha.service.image.ImageCaptchaService;

public class JCaptchaServiceSingleton {
	private static ImageCaptchaService imageCaptchaService = new DefaultManageableImageCaptchaService(
			new FastHashMapCaptchaStore(), new GMailEngine(), 180, 100000,
			75000);

	public static ImageCaptchaService getInstance() {
		return image