package com.yh.web.jcaptcha;
import java.awt.Color;
import java.awt.Font;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.log4j.Logger;
import com.octo.captcha.component.image.backgroundgenerator.BackgroundGenerator;
import com.octo.captcha.component.image.backgroundgenerator.GradientBackgroundGenerator;
import com.octo.captcha.component.image.fontgenerator.FontGenerator;
import com.octo.captcha.component.image.fontgenerator.RandomFontGenerator;
import com.octo.captcha.component.image.textpaster.RandomTextPaster;
import com.octo.captcha.component.image.textpaster.SimpleTextPaster;
import com.octo.captcha.component.image.textpaster.TextPaster;
import com.octo.captcha.component.image.wordtoimage.ComposedWordToImage;
import com.octo.captcha.component.image.wordtoimage.WordToImage;
import com.octo.captcha.component.word.wordgenerator.RandomWordGenerator;
import com.octo.captcha.component.word.wordgenerator.WordGenerator;
import com.octo.captcha.engine.image.ListImageCaptchaEngine;
import com.octo.captcha.image.ImageCaptcha;
import com.octo.captcha.image.ImageCaptchaFactory;
import com.octo.captcha.image.gimpy.GimpyFactory;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class CaptchaServiceSingleton extends ListImageCaptchaEngine {
private static Logger log = Logger.getLogger(CaptchaServiceSingleton.class);
private static final Integer MIN_WORD_LENGTH = new Integer(4);
private static final Integer MAX_WORD_LENGTH = new Integer(5);
private static final Integer IMAGE_WIDTH = new Integer(90);
private static final Integer IMAGE_HEIGHT = new Integer(30);
private static final Integer MIN_FONT_SIZE = new Integer(12);
private static final Integer MAX_FONT_SIZE = new Integer(14);
private static final String NUMERIC_CHARS = "23456789";// No numeric 0
private static final String UPPER_ASCII_CHARS = "工要在地一上是中国同民我人有的和主产不ABCDEFGHJKLMNPQRSTXYZ";// No
// upper
// O I
// we dont use the lower characters because it cause dificult in some case,
// so that
// we must always UPPERCASE the input from user (currently in
// OnlineUserImpl)
private static final String LOWER_ASCII_CHARS = "abcdefghjkmnpqrstxyz";// No
// lower
// o i
/**
* Singleton instance of this class
*/
private static CaptchaServiceSingleton instance = new CaptchaServiceSingleton();
private ArrayList textPasterList;
private ArrayList backgroundGeneratorList;
private ArrayList fontGeneratorList;
ImageCaptcha imageCaptcha = null;
/**
* Private constructor to prevent instantiation
*/
private CaptchaServiceSingleton() {
}
public static CaptchaServiceSingleton getInstance() {
return instance;
}
protected void buildInitialFactories() {
try {
textPasterList = new ArrayList();
backgroundGeneratorList = new ArrayList();
fontGeneratorList = new ArrayList();
textPasterList.add(new SimpleTextPaster(MIN_WORD_LENGTH,
MAX_WORD_LENGTH, Color.black));
textPasterList.add(new RandomTextPaster(MIN_WORD_LENGTH,
MAX_WORD_LENGTH, Color.black));
textPasterList.add(new SimpleTextPaster(MIN_WORD_LENGTH,
MAX_WORD_LENGTH, Color.black));
textPasterList.add(new RandomTextPaster(MIN_WORD_LENGTH,
MAX_WORD_LENGTH, Color.black));
textPasterList.add(new SimpleTextPaster(MIN_WORD_LENGTH,
MAX_WORD_LENGTH, Color.blue));
textPasterList.add(new RandomTextPaster(MIN_WORD_LENGTH,
MAX_WORD_LENGTH, Color.blue));
backgroundGeneratorList.add(new GradientBackgroundGenerator(
IMAGE_WIDTH, IMAGE_HEIGHT, Color.orange, Color.white));
backgroundGeneratorList.add(new GradientBackgroundGenerator(
IMAGE_WIDTH, IMAGE_HEIGHT, Color.white, Color.green));
backgroundGeneratorList.add(new GradientBackgroundGenerator(
IMAGE_WIDTH, IMAGE_HEIGHT, Color.gray, Color.white));
backgroundGeneratorList.add(new GradientBackgroundGenerator(
IMAGE_WIDTH, IMAGE_HEIGHT, Color.white, Color.orange));
backgroundGeneratorList.add(new GradientBackgroundGenerator(
IMAGE_WIDTH, IMAGE_HEIGHT, Color.green, Color.white));
backgroundGeneratorList.add(new GradientBackgroundGenerator(
IMAGE_WIDTH, IMAGE_HEIGHT, Color.yellow, Color.white));
backgroundGeneratorList.add(new GradientBackgroundGenerator(
IMAGE_WIDTH, IMAGE_HEIGHT, Color.white, Color.magenta));
// fontGeneratorList.add(new
// TwistedAndShearedRandomFontGenerator(MIN_FONT_SIZE,
// MAX_FONT_SIZE));
// fontGeneratorList.add(new
// TwistedRandomFontGenerator(MIN_FONT_SIZE, MAX_FONT_SIZE));// link
// character too much
Font f = Font.decode("华文细黑");
fontGeneratorList.add(new RandomFontGenerator(MIN_FONT_SIZE,
MAX_FONT_SIZE,new Font[]{f}));// to easy to read
// fontGeneratorList.add(new
// DeformedRandomFontGenerator(MIN_FONT_SIZE, MAX_FONT_SIZE));// to
// small font
// no char upper O, char lower o and numerric 0 because user cannot
// answer
WordGenerator words = new RandomWordGenerator(NUMERIC_CHARS
+ UPPER_ASCII_CHARS);
for (Iterator fontIter = fontGeneratorList.iterator(); fontIter
.hasNext();) {
FontGenerator font = (FontGenerator) fontIter.next();
for (Iterator backIter = backgroundGeneratorList.iterator(); backIter
.hasNext();) {
BackgroundGenerator back = (BackgroundGenerator) backIter
.next();
for (Iterator textIter = textPasterList.iterator(); textIter
.hasNext();) {
TextPaster parser = (TextPaster) textIter.next();
WordToImage word2image = new ComposedWordToImage(font,
back, parser);
ImageCaptchaFactory factory = new GimpyFactory(words,
word2image);
addFactory(factory);
}
}
}
} catch (Exception ex) {
log.error("产生校验码初始化异常 == " + ex);
// throw ex;
}
}
/**
* Write the captcha image of current user to the servlet response
*
* @param request
* HttpServletRequest
* @param response
* HttpServletResponse
* @throws IOException
*/
public void writeCaptchaImage(HttpServletRequest request,
HttpServletResponse response) throws IOException {
imageCaptcha = getNextImageCaptcha();
HttpSession session = request.getSession();
session.setAttribute("imageCaptcha", imageCaptcha);
BufferedImage image = (BufferedImage) imageCaptcha.getChallenge();
OutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
// render the captcha challenge as a JPEG image in the response
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
JPEGImageEncoder encoder = JPEGCodec
.createJPEGEncoder(outputStream);
encoder.encode(image);
outputStream.flush();
outputStream.close();
outputStream = null;// no close twice
} catch (IOException ex) {
log.error("产生图片异常 == " + ex);
throw ex;
} finally {
if (outputStream != null) {
try {
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
jcaptchaTest1.rar (21个子文件)
jcaptchaTest1
.project 1KB
.settings
.jsdtscope 500B
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.jsdt.ui.superType.name 6B
.mymetadata 312B
WebRoot
WEB-INF
web.xml 971B
lib
log4j-1.2.15.jar 383KB
jcaptcha-1.0-all.jar 341KB
commons-logging-api-1.1.jar 44KB
commons-collections-3.1.jar 546KB
classes
Log4j.properties 1KB
com
yh
web
jcaptcha
ImageCheckServlet.class 2KB
CaptchaServiceSingleton.class 8KB
ImageCaptchaServlet.class 2KB
index.jsp 1KB
META-INF
MANIFEST.MF 36B
.myeclipse
src
Log4j.properties 1KB
com
yh
web
jcaptcha
ImageCheckServlet.java 2KB
CaptchaServiceSingleton.java 9KB
ImageCaptchaServlet.java 1KB
.classpath 688B
共 21 条
- 1
资源评论
- tc21236442012-08-11不错,可以生成验证码 ! 感谢分享
- 「已注销」2012-12-11这个有点难搞啊
- DarkNight_YuJiang2014-08-30不错,可以生成验证码 ,效果不怎么好看
- 比不过比2012-07-26生成了验证码,但不是我想要的谢谢
yanglei128369
- 粉丝: 1
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功