zl程序教程

您现在的位置是:首页 >  工具

当前栏目

验证码生成组件–JCaptcha的使用详解编程语言

组件编程语言 使用 详解 &# 生成 8211 验证码
2023-06-13 09:20:41 时间

所需jar包:

验证码生成组件--JCaptcha的使用详解编程语言

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

web.xml

 servlet 

 servlet-name Jcaptcha /servlet-name 

 servlet-class com.bkgd.cms.servlet.JcaptchaServlet /servlet-class 

 /servlet 

 servlet-mapping 

 servlet-name Jcaptcha /servlet-name 

 url-pattern /captcha.svl /url-pattern 

 /servlet-mapping 

需要一个服务类 生成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 imageCaptchaService; 

验证码样式的图片引擎GMailEngine

package com.bkgd.cms.servlet; 

import java.awt.Color; 

import java.awt.Font; 

import java.awt.image.ImageFilter; 

import com.octo.captcha.component.image.backgroundgenerator.BackgroundGenerator; 

import com.octo.captcha.component.image.backgroundgenerator.UniColorBackgroundGenerator; 

import com.octo.captcha.component.image.color.RandomListColorGenerator; 

import com.octo.captcha.component.image.deformation.ImageDeformation; 

import com.octo.captcha.component.image.deformation.ImageDeformationByFilters; 

import com.octo.captcha.component.image.fontgenerator.FontGenerator; 

import com.octo.captcha.component.image.fontgenerator.RandomFontGenerator; 

import com.octo.captcha.component.image.textpaster.DecoratedRandomTextPaster; 

import com.octo.captcha.component.image.textpaster.TextPaster; 

import com.octo.captcha.component.image.textpaster.textdecorator.TextDecorator; 

import com.octo.captcha.component.image.wordtoimage.DeformedComposedWordToImage; 

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.gimpy.GimpyFactory; 

 * 仿照JCaptcha2.0编写GMail验证码样式的图片引擎. 

public class GMailEngine extends ListImageCaptchaEngine { 

 @Override 

 protected void buildInitialFactories() { 

 int minWordLength = 4; 

 int maxWordLength = 4; 

 int fontSize = 26; 

 int imageWidth = 110; 

 int imageHeight = 50; 

 //在页面上将显示的内容 

 WordGenerator dictionnaryWords = new RandomWordGenerator("1234567890"); 

 TextPaster randomPaster = new DecoratedRandomTextPaster(minWordLength, 

 maxWordLength, new RandomListColorGenerator( 

 new Color[] { new Color(0, 0, 0) }), 

 new TextDecorator[] {}); 

 BackgroundGenerator background = new UniColorBackgroundGenerator( 

 imageWidth, imageHeight, Color.white); 

 FontGenerator font = new RandomFontGenerator(fontSize, fontSize, 

 new Font[] { new Font("nyala", Font.BOLD, fontSize), 

 new Font("Bell MT", Font.PLAIN, fontSize), 

 new Font("Credit valley", Font.BOLD, fontSize) }); 

 ImageDeformation postDef = new ImageDeformationByFilters(new ImageFilter[] {}); 

 ImageDeformation backDef = new ImageDeformationByFilters(new ImageFilter[] {}); 

 ImageDeformation textDef = new ImageDeformationByFilters(new ImageFilter[] {}); 

 WordToImage word2image = new DeformedComposedWordToImage(font, 

 background, randomPaster, backDef, textDef, postDef); 

 addFactory(new GimpyFactory(dictionnaryWords, word2image)); 

前台JSP

 input type="text" name="checkCode" id="checkCode" value=""/ 

 img id="captcha" src="captcha.svl" / 

后台Action验证

HttpServletRequest request = ServletActionContext.getRequest(); 

String sessID = request.getSession().getId(); 

Boolean isResponseCorrect = JCaptchaServiceSingleton.getInstance().validateResponseForID(sessID, checkCode); 

if(isResponseCorrect){ 

 return "true" 

}else{ 

 return "false" 

}

14255.html

cgojavaxml