JCaptcha开源组件-生成第一个验证码
2013-04-11 09:01
351 查看
1. 介绍
jcaptcha是一个开源的用来生成图形验证码的Java开源组件,不光是可以生成图片式的验证码,还可以生成声音式的(新浪就使用了双重验证码)。
2. 与Spring
JCaptcha尽可能地遵循IOC(Inversion of Control)模式,使其能够为应用程序更加简洁的创建组件.
另一方面,Spring框架也允许通过XML配置文件声明的方式使用JCaptcha组件。所以每一个jCaptcha的单一组件能够通过Spring配置文件定义并且实例化。
3.
关联包
使用该开源组件时,需要配置以下3个包:
commons-collections-3.2.1.jar
commons-logging-1.1.1.jar
jcaptcha-1.0-all.jar
第3个包是该开源组件的核心包,上面两个包是核心包在运行时需要用到的基本包。
4.
简单的使用
a.
调用验证码的index.html
b.
配置web.xml
c.
编写核心包配置类:SimpleCustomImageService.java
d.
编写Servlet实现类:Image.java
e. 效果图
jcaptcha是一个开源的用来生成图形验证码的Java开源组件,不光是可以生成图片式的验证码,还可以生成声音式的(新浪就使用了双重验证码)。
2. 与Spring
JCaptcha尽可能地遵循IOC(Inversion of Control)模式,使其能够为应用程序更加简洁的创建组件.
另一方面,Spring框架也允许通过XML配置文件声明的方式使用JCaptcha组件。所以每一个jCaptcha的单一组件能够通过Spring配置文件定义并且实例化。
3.
关联包
使用该开源组件时,需要配置以下3个包:
commons-collections-3.2.1.jar
commons-logging-1.1.1.jar
jcaptcha-1.0-all.jar
第3个包是该开源组件的核心包,上面两个包是核心包在运行时需要用到的基本包。
4.
简单的使用
a.
调用验证码的index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>验证码生成测试</title> </head> <body> <img src="CaptchaImage" /> </body> </html>
b.
配置web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name></display-name> <servlet> <servlet-name>Image</servlet-name> <servlet-class>sample.Image</servlet-class> </servlet> <servlet-mapping> <servlet-name>Image</servlet-name> <url-pattern>/CaptchaImage</url-pattern> </servlet-mapping> <welcome-file-list&g 4000 t; <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>
c.
编写核心包配置类:SimpleCustomImageService.java
package sample; import java.awt.Color; import com.octo.captcha.CaptchaFactory; import com.octo.captcha.component.image.backgroundgenerator.FunkyBackgroundGenerator; import com.octo.captcha.component.image.color.SingleColorGenerator; import com.octo.captcha.component.image.fontgenerator.RandomFontGenerator; import com.octo.captcha.component.image.textpaster.RandomTextPaster; import com.octo.captcha.component.image.wordtoimage.ComposedWordToImage; import com.octo.captcha.component.word.wordgenerator.RandomWordGenerator; import com.octo.captcha.engine.image.gimpy.SimpleListImageCaptchaEngine; import com.octo.captcha.image.gimpy.GimpyFactory; import com.octo.captcha.service.captchastore.FastHashMapCaptchaStore; import com.octo.captcha.service.image.DefaultManageableImageCaptchaService; import com.octo.captcha.service.image.ImageCaptchaService; /************************************************************* * * 名称:SimpleCustomImageService * 类型:声明类 * 作用:调用 jcaptcha 包内方法,进行默认初始化。 * 内容:getInstance()方法 * initializeService() * 编写:刘武志 * 日期:2013-04-11 * *************************************************************/ public class SimpleCustomImageService { private static ImageCaptchaService instance = initializeService(); /** * 方法名:getInstance() * 功 能:用于获取 ImageCaptchaService 类型的返回值 * 返回类型:ImageCaptchaService * */ public static ImageCaptchaService getInstance() { return instance; } /** * * 方法名:initializeService * 功 能:该方法用于完成验证码生成的基本设置 * 返回类型:ImageCaptchaService * */ private static ImageCaptchaService initializeService() { // 设置随机字体大小的范围 RandomFontGenerator fonts = new RandomFontGenerator(new Integer(20), new Integer(25)); // ***FunkyBackgroundGenerator类,可以设置四种颜色点混合而成的背景*** // 第一个参数是图片宽度 // 第二个参数是图片高度 // 第三至第六个参数分別是图片中,左上,左下,右上,右下四个部分的颜色点的颜色 // 第七个参数是颜色混杂的程度,如:0.5为颜色相互混合的点占一半,最大1.0 // ***设置四个颜色除了可以使用SingleColorGenerator外, // ***应该也可以使用RandomListColorGenerator类,让每个部分的颜色都不固定 SingleColorGenerator leftUpColor = new SingleColorGenerator(Color.RED); SingleColorGenerator leftDownColor = new SingleColorGenerator(Color.YELLOW); SingleColorGenerator rightUpColor = new SingleColorGenerator(Color.BLUE); SingleColorGenerator rightDownColor = new SingleColorGenerator(Color.GREEN); FunkyBackgroundGenerator background = new FunkyBackgroundGenerator(200, 100, leftUpColor, leftDownColor, rightUpColor, rightDownColor, 0.5f); // 下面被注释掉的方法四利用 FileReaderRandomBackgroundGenerator 进行设置验证码背景图片 // 第一个参数和第二个参数分别表示图片的宽度和高度 // 第三个参数表示图片的文件夹,当你读取文件夹时,会随机取出一张图片作为背景 // FileReaderRandomBackgroundGenerator background = // new FileReaderRandomBackgroundGenerator( // 200, 100, "D:\\Program Files\\apache-tomcat-6.0.20\\webapps\\image"); // 设置单词长度,即:单词的位数,第二个是最大能接受字符的个数,最后一个参数是颜色 RandomTextPaster textPaster = new RandomTextPaster(new Integer(5), new Integer(5), Color.BLUE); // 组成验证码,第一参数为字体的设置,第二参数为生成的背景,第三参数为设置生成的单词长度 ComposedWordToImage cwti = new ComposedWordToImage(fonts, background, textPaster); // 设置随机取词范围,在这一阶段一定要排除难以辨认的字符 RandomWordGenerator words = new RandomWordGenerator("ABCDEFGHIJKLMNOPQRSTUVWXYZ"); // 设置 GimpyFactory 类,第一个参数为验证码组成,第二参数是随机取词范围 GimpyFactory gimpy = new GimpyFactory(words, cwti); // 这个类,默认的添加了一种生成文字的工厂类 SimpleListImageCaptchaEngine engine = new SimpleListImageCaptchaEngine(); // 如果直接用add方法来添加,则会保留 SimpleListImageCaptchaEngine 类,默认添加的一个工厂类 engine.setFactories(new CaptchaFactory[] { gimpy }); // 验证码存储器 FastHashMapCaptchaStore captchaStore = new FastHashMapCaptchaStore(); // 创建一个用来生成图片的服务,参数如下: // 第一个参数是存储器,用来存储生成的文本,最终等待输入验证码后,验证输入是否正确 // 第二个参数是生成图片的引擎 // 第三个参数是最小保证存储的时间,单位是秒 // 第四个参数是最大的存储大小,可能是生成图片最大使用的大小 // 第五个参数是 Captcha 在缓存集合的验证码加载存储数量 DefaultManageableImageCaptchaService defaultService = new DefaultManageableImageCaptchaService(captchaStore, engine, 180, 100000, 75000); return defaultService; } }
d.
编写Servlet实现类:Image.java
package sample; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; 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 com.octo.captcha.service.CaptchaServiceException; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder; /************************************************************* * * 名称:Image * 类型:实现类 * 作用:实现验证码生成 * 内容:doGet()方法 * 编写:刘武志 * 日期:2013-04-11 * *************************************************************/ @SuppressWarnings("serial") public class Image extends HttpServlet { /** * * 方法名:doGet() * 功 能:接受浏览器以Get方式访问时进行处理 * 注:该方法可自动生成 * */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { byte[] captchaChallengeAsJpeg = null; // 声明一个 ByteArrayOutputStream 对象,用于接收输出流 ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream(); try { // 返回包含分配给 Session 的唯一标识符的字符串 String captchaId = request.getSession().getId(); // 取得单例的 ImageCaptchaService 对象,生成一个 BufferedImage 对象 BufferedImage challenge = SimpleCustomImageService.getInstance() .getImageChallengeForID(captchaId,request.getLocale()); JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(jpegOutputStream); // 生成 jpg 格式的验证码图片,存储在 jpegOutputStream 对象中 jpegEncoder.encode(challenge); } catch (IllegalArgumentException e) { response.sendError(HttpServletResponse.SC_NOT_FOUND); return; } catch (CaptchaServiceException e) { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); return; } // 生成验证码图片的byte数组 captchaChallengeAsJpeg = jpegOutputStream.toByteArray(); // 设置基本响应的格式 response.setHeader("Cache-Control", "no-store"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("Expires", 0); response.setContentType("image/jpeg"); ServletOutputStream responseOutputStream = response.getOutputStream(); // 写入验证码图片 responseOutputStream.write(captchaChallengeAsJpeg); responseOutputStream.flush(); responseOutputStream.close(); } }
e. 效果图
相关文章推荐
- 超棒的验证码生成组件---Jcaptcha
- 用开源组件jcaptcha做jsp彩色验证码
- 超棒的验证码生成组件---Jcaptcha
- Web验证码的实现方法(2)---开源组件Jcaptcha
- 超棒的验证码生成组件---Jcaptcha
- 超棒的验证码生成组件---Jcaptcha
- jcaptcha验证码开源组件官方教程
- 验证码生成组件--JCaptcha的使用
- 验证码生成组件--JCaptcha的使用
- 验证码生成组件--JCaptcha的使用
- 用开源组件jcaptcha做jsp彩色验证码
- 验证码生成组件--JCaptcha的使用
- 验证码生成组件--JCaptcha的使用
- 谷歌开源组件kaptcha生成验证码
- 用开源组件jcaptcha做jsp彩色验证码
- 用开源组件jcaptcha做jsp彩色验证码 ( 转http://blog.csdn.net/alexjjf/archive/2006/10/31/1359333.aspx)
- 用开源组件jcaptcha做jsp彩色验证码
- 验证码的制作(二):使用开源组件jcaptcha来实现验证码
- 用开源组件jcaptcha做jsp彩色验证码
- 使用开源组件生成随机验证码