使用方法

项目中导入kaptcha-2.3.jar包

在web.xml里面新增

<!-- 登陆验证码Kaptcha -->
    <servlet>
        <servlet-name>Kaptcha</servlet-name>
        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
                   <init-param>
            <param-name>kaptcha.producer.impl</param-name>
            <param-value>com.google.code.kaptcha.impl.DefaultKaptcha </param-value>
        </init-param>
                   <init-param>
                            <param-name>kaptcha.textproducer.font.color</param-name>
                            <param-value>black</param-value>
                   </init-param>
                   <init-param>
                            <param-name>kaptcha.textproducer.char.space</param-name>
                            <param-value>10</param-value>
                   </init-param>
                   <init-param>
                            <param-name>kaptcha.border</param-name>
                            <param-value>no</param-value>
                   </init-param>
                   <init-param>
                            <param-name>kaptcha.border.thickness</param-name>
                            <param-value>0</param-value>
                   </init-param>
                   <init-param>
                            <param-name>kaptcha.textproducer.font.size</param-name>
                            <param-value>35</param-value>
                   </init-param>
                   <init-param>
                            <param-name>kaptcha.textproducer.char.length</param-name>
                            <param-value>4</param-value>
                   </init-param>
                   <init-param>
            <param-name>kaptcha.image.width</param-name>
            <param-value>150</param-value>
        </init-param>
        <init-param>
            <param-name>kaptcha.image.height</param-name>
            <param-value>50</param-value>
        </init-param>
        <init-param>
                            <param-name>kaptcha.background.clear.from</param-name>
                            <param-value>255,255,255</param-value>
                   </init-param>
                   <init-param>
                            <param-name>kaptcha.background.clear.to</param-name>
                            <param-value>255,255,255</param-value>
                   </init-param>
                   <init-param>
            <param-name>kaptcha.textproducer.char.string</param-name>
            <param-value>0123456789</param-value>
        </init-param>
        <init-param>
            <param-name>kaptcha.textproducer.font.names</param-name>
            <param-value>Arial Black</param-value>
        </init-param>
         <init-param>
            <param-name>kaptcha.noise.impl</param-name>
            <param-value>com.google.code.kaptcha.impl.NoNoise</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>Kaptcha</servlet-name>
        <url-pattern>/kaptcha.jpg</url-pattern>
</servlet-mapping>

在页面上新增

<img id="img" src="kaptcha.jpg" width="90" height="25" onclick="refresh();" alt="点击更换验证码"/>
function refresh() {
                  document.getElementById('img').src="kaptcha.jpg?"+Math.random();
}

在action里获取验证码ID:

request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);

Jcaptcha验证码生成组件用法

1.创建项目JcaptchaDemo

2.引入相关.jar文件

jcaptcha-1.0-all.jar;

commons-logging-1.0.4.jar;

commons-collections-2.1.1.jar

3.创建GMailEngine,仿照JCaptcha2.0编写GMail验证码样式的图片引擎.,具体的代码如下:

设置生成验证的样式就是在这里设置。

package com.zsw.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.FileDictionary;
import com.octo.captcha.component.word.wordgenerator.ComposeDictionaryWordGenerator;
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验证码样式的图片引擎.  
 * @author Administrator
 */
public class GMailEngine extends ListImageCaptchaEngine  {
 @Override
 protected void buildInitialFactories() {
  
   int minWordLength = 4;
   int maxWordLength = 5;
   int fontSize = 24;
   int imageWidth = 100;
   int imageHeight = 40;
           
   //word generator
   WordGenerator dictionnaryWords = new ComposeDictionaryWordGenerator(new FileDictionary("toddlist"));
           
   //word2image components 
   TextPaster randomPaster = new DecoratedRandomTextPaster(
           minWordLength, 
           maxWordLength,
           new RandomListColorGenerator(new Color[] { 
             new Color(23, 170, 27), 
             new Color(220, 34, 11),   
             new Color(23, 67, 172) 
           }), 
                            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));
 }
}

4.在这里创建一个单例类:

package com.zsw.servlet;
import com.octo.captcha.service.captchastore.FastHashMapCaptchaStore;
import com.octo.captcha.service.image.DefaultManageableImageCaptchaService;
import com.octo.captcha.service.image.ImageCaptchaService;
public class CaptchaServiceSingleton {
 
 private static ImageCaptchaService instance = new DefaultManageableImageCaptchaService(new FastHashMapCaptchaStore(), new GMailEngine(), 180, 100000,75000);
 public static ImageCaptchaService getInstance() {
  return instance;
 }
}

5.创建ImageCaptchaServlet.java,它是一个Servlet

图片src,制定这个Servlet在Web.xml中配置的名称,获取验证码图片。具体的内容如下:

package com.zsw.servlet;
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;
public class ImageCaptchaServlet extends HttpServlet {
 
 private static final long serialVersionUID = 1L;
    public ImageCaptchaServlet() {
    }
 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  
  byte[] captchaChallengeAsJpeg = null;
  ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
  
  try {
    String captchaId = request.getSession().getId();   
    BufferedImage challenge = CaptchaServiceSingleton.getInstance().getImageChallengeForID(captchaId,request.getLocale());
   JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(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;
  }
  captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
  // flush it in the response
  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();
 }
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  
 }
}

6.创建index.jsp以及sample.jsp

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="sample.jsp">
 <table style="width:300px; height:30px;" cellpadding="1" cellspacing="1" border="1">
  <tr>
   <td align="right">
    <input type='text' name='j_captcha_response' value=''>
   </td>
   <td align="left">
    <img src="ImageCaptchaServlet">
   </td>
  </tr>
 </table>
</form>
</body>
</html>

sample.jsp:处理检验验证码

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="UTF-8"%>
<%@page import="com.octo.captcha.service.CaptchaServiceException"%>
<%@page import="com.zsw.servlet.CaptchaServiceSingleton"%>
<%
 Boolean isResponseCorrect = Boolean.FALSE;
 String captchaId = request.getSession().getId();
 String responsestr = request.getParameter("j_captcha_response");
 
 try {
  isResponseCorrect = CaptchaServiceSingleton.getInstance().validateResponseForID(captchaId, responsestr);
  if(isResponseCorrect){
  }else{
   out.print("It's worng......");
  }
 } catch (CaptchaServiceException e) {
 }
%>

7.启动服务,运行程序效果如下:

8, 对设置验证样式的引擎类,进行重构,及支持验证码有背景图片

8.1 创建com.zsw.captcha包,将相关背景图片放入该包中;

8.2 创建JCaptchaEngine.java,具体内容如下:

package com.zsw.common;
import java.awt.Color;
import java.awt.Font;
import com.octo.captcha.component.image.backgroundgenerator.BackgroundGenerator;
import com.octo.captcha.component.image.backgroundgenerator.FileReaderRandomBackgroundGenerator;
import com.octo.captcha.component.image.color.RandomListColorGenerator;
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.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.gimpy.GimpyFactory;
/**
 * 生成验证码图片
 */
public class JCaptchaEngine extends ListImageCaptchaEngine {
 public static final String IMAGE_CAPTCHA_KEY = "imageCaptcha";// ImageCaptcha对象存放在Session中的key
 public static final String CAPTCHA_INPUT_NAME = "j_captcha";// 验证码输入表单名称
 public static final String CAPTCHA_IMAGE_URL = "/captcha.jpg";// 验证码图片URL
 private static final Integer MIN_WORD_LENGTH = 4;// 验证码最小长度
 private static final Integer MAX_WORD_LENGTH = 4;// 验证码最大长度
 private static final Integer IMAGE_HEIGHT = 28;// 验证码图片高度
 private static final Integer IMAGE_WIDTH = 80;// 验证码图片宽度
 private static final Integer MIN_FONT_SIZE = 16;// 验证码最小字体
 private static final Integer MAX_FONT_SIZE = 16;// 验证码最大字体
 private static final String RANDOM_WORD = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";// 随机字符
 private static final String IMAGE_PATH = "./com/zsw/captcha/";// 随机背景图片路径
 
 // 验证码随机字体
 private static final Font[] RANDOM_FONT = new Font[] { 
   new Font("nyala", Font.BOLD, MIN_FONT_SIZE), 
   new Font("Arial", Font.BOLD, MIN_FONT_SIZE),
   new Font("Bell MT", Font.BOLD, MIN_FONT_SIZE), 
   new Font("Credit valley", Font.BOLD, MIN_FONT_SIZE),
   new Font("Impact", Font.BOLD, MIN_FONT_SIZE) 
 };
 // 验证码随机颜色
 private static final Color[] RANDOM_COLOR = new Color[] { 
   new Color(255, 255, 255), 
   new Color(255, 220, 220), 
   new Color(220, 255, 255), 
   new Color(220, 220, 255),
   new Color(255, 255, 220), 
   new Color(220, 255, 220) 
 };
 // 生成验证码
 @Override
 protected void buildInitialFactories() {
  
  RandomListColorGenerator randomListColorGenerator = new RandomListColorGenerator(RANDOM_COLOR);// 验证码随机颜色
  BackgroundGenerator backgroundGenerator = new FileReaderRandomBackgroundGenerator(IMAGE_WIDTH, IMAGE_HEIGHT, IMAGE_PATH); //验证码背景图片
  WordGenerator wordGenerator = new RandomWordGenerator(RANDOM_WORD);
  FontGenerator fontGenerator = new RandomFontGenerator(MIN_FONT_SIZE, MAX_FONT_SIZE, RANDOM_FONT);// 验证码随机字体
  TextDecorator[] textDecorator = new TextDecorator[] {};
  TextPaster textPaster = new DecoratedRandomTextPaster(MIN_WORD_LENGTH, MAX_WORD_LENGTH, randomListColorGenerator, textDecorator);
  WordToImage wordToImage = new ComposedWordToImage(fontGenerator, backgroundGenerator, textPaster);
  addFactory(new GimpyFactory(wordGenerator, wordToImage));
 }
}

8.3 修改第4步中的单例类,具体内容如下:

package com.zsw.servlet;
import com.octo.captcha.service.captchastore.FastHashMapCaptchaStore;
import com.octo.captcha.service.image.DefaultManageableImageCaptchaService;
import com.octo.captcha.service.image.ImageCaptchaService;
import com.zsw.common.JCaptchaEngine;
public class CaptchaServiceSingleton {
 private static ImageCaptchaService instance = new DefaultManageableImageCaptchaService(new FastHashMapCaptchaStore(), new JCaptchaEngine(), 180, 100000,75000);
 public static ImageCaptchaService getInstance() {
  return instance;
 }
}

8.4 运行启动,效果图如下:

java验证码组件kaptcha使用方法的更多相关文章

  1. 推荐一款java的验证码组件——kaptcha

    使用方法: 项目中导入kaptcha-2.3.jar包 在web.xml里面新增:   <!-- 登陆验证码Kaptcha --> <servlet> <servlet- ...

  2. 在 Java EE 组件中使用 Camel Routes

    摘要:你可以通过集成 Camel 和 WildFly 应用服务器(使用 WildFly-Camel 子系统)在 Java EE 组件中开始使用 Apache Camel Routes. [编者按]作者 ...

  3. kaptcha 验证码组件使用

    kaptcha 验证码组件使用简介   kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.co ...

  4. kaptcha图形验证码组件

    kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.K ...

  5. kaptcha Java验证码

    原文:http://www.cnblogs.com/chizizhixin/p/5311619.html 在项目中经常会使用验证码,kaptcha 就一个非常不错的开源框架,分享下自己在项目中的使用: ...

  6. java 调用webservice的各种方法总结

    java 调用webservice的各种方法总结 几种流行的开源WebService框架Axis1,Axis2,Xfire,CXF,JWS比较 方法一:创建基于JAX-WS的webservice(包括 ...

  7. Java Swing 绝对布局管理方法,null布局(转)

    首先把相关容器的布局方式设为 setLayout(null); 然后调用组件的  setBounds() 方法 设置button的位置为(100,100) 长宽分别为 60,25 jButton.se ...

  8. springMVC+Java验证码完善注册功能

    这篇文章简单的写了一个java验证码,为之前写过的springMVC注册功能加上验证码,验证码的作用就不多说了,防止机器人程序恶意注册什么的.. 其中User.java,加上了password和cod ...

  9. java制作验证码(java验证码小程序)

    手动制作java的验证码 Web应用验证码的组成: (1)输入框 (2)显示验证码的图片 验证码的制作流程: 生成验证码的容器使用 j2ee的servlet 生成图片需要的类: (1) Buffere ...

随机推荐

  1. C语言写的流氓关机程序及破解

    记得大二刚开始接触电脑的那个时候,偶尔会弹出一个强制关机的窗口,当时没有办法,如下: 现在看来只是一个小程序而已,用C语言编写的: #include<windows.h> int main ...

  2. asp.net中Ajax控件的用途(一)

    1,UpdatePanel控件,用户更新部分内容,示例 放入一个Label和一个Button,单击按钮,label显示当前时间. 2,ScriptManagerProxy控件,每个页面只能有一个Scr ...

  3. 【SQL】SQL2012离线帮助文档安装不上的处理手记

    注:解决方法在最后,心急的童鞋可以直接往下滚动. 我SQL实例装的是2008 R2版,由于该版自带的SSMS(Microsoft SQL Server Management Studio 管理工具)存 ...

  4. Web API:将FlexChart导出为图片

    如果想要将FlexChart在应用之外使用,比如使用在报表中,Web API帮助你将FlexChart导出成任何你需要的图片格式. 下面是实现的步骤: 1:创建FlexChart 2:调用Servic ...

  5. Scalaz(48)- scalaz-stream: 深入了解-Transducer: Process1-tee-wye

    在上一篇讨论里我们介绍了Source,它的类型款式是这样的:Process[F[_],O].Source是通过await函数来产生数据流.await函数款式如下: def await[F[_], A, ...

  6. POJ 3276 Face The Right Way 反转

    大致题意:有n头牛,有些牛朝正面,有些牛朝背面.现在你能一次性反转k头牛(区间[i,i+k-1]),求使所有的牛都朝前的最小的反转次数,以及此时最小的k值. 首先,区间反转的顺序对结果没有影响,并且, ...

  7. BaseActivity的抽取

    Activity有些公共部分,比如setContentView.Activity管理.初始化操作.联网操作.Activity跳转.关闭当前Activity.保存用户登录信息.读取用户登录信息等. 我们 ...

  8. Oracle 免费的数据库--Database 快捷版 11g 安装使用与"SOD框架"对Oracle的CodeFirst支持

    一.Oracle XE 数据库与连接工具安装使用 Oracle数据库历来以价格昂贵出名,当然贵有贵的道理,成为一个Oracle DBA也是令人羡慕的事情,如果程序员熟悉Oracle使用也有机会接触到大 ...

  9. 刷新ALV定位到当前记录行

    如果使用"REFRESH_TABLE_DISPLAY"刷新ALV后,记录会跳到第一行,以下代码可以使记录仍然定位在当前行 DATA ls_stable TYPE lvc_s_stb ...

  10. SharePoint 2013 日历视图兼容性问题

    在IE11上访问SharePoint 2013 calendar视图,发现加入兼容性视图以后访问,正常,如下图: 不加入兼容性视图IE11访问,出现兼容性问题,如下图: 因为有些环境有问题,有些环境没 ...