1.从官网http://jcaptcha.sourceforge.net/下载插件。将对应jar包导入到lib文件夹下

2.创建一个CaptchaServiceSingleton类用来获取jcaptcha自己实现的默认验证码生成器对象DefaultManageableImageCaptchaService(使用单例模式)。
package com.xhc.jcaptcha;

import com.octo.captcha.service.image.DefaultManageableImageCaptchaService;
import com.octo.captcha.service.image.ImageCaptchaService; public class CaptchaServiceSingleton {
private static ImageCaptchaService instance = new DefaultManageableImageCaptchaService(); public static ImageCaptchaService getInstance(){
return instance;
}
}
3.创建处理验证码生成的servlet
package com.xhc.jcaptcha;

import java.awt.image.BufferedImage;
import java.awt.image.Raster;
import java.io.ByteArrayOutputStream;
import java.io.IOException; import javax.servlet.ServletConfig;
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 { public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws ServletException, IOException {
byte[] captchaChallengeAsJpeg = null;
// the output stream to render the captcha image as jpeg into
ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
try {
// get the session id that will identify the generated captcha.
//the same id must be used to validate the response, the session id is a good candidate!
String captchaId = httpServletRequest.getSession().getId();
// call the ImageCaptchaService getChallenge method
BufferedImage challenge = new BufferedImage(68, 22, BufferedImage.TYPE_INT_RGB);
challenge=CaptchaServiceSingleton.getInstance().getImageChallengeForID(captchaId,
httpServletRequest.getLocale());
// a jpeg encoder
JPEGImageEncoder jpegEncoder =
JPEGCodec.createJPEGEncoder(jpegOutputStream);
jpegEncoder.encode(challenge);
} catch (IllegalArgumentException e) {
httpServletResponse.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
} catch (CaptchaServiceException e) {
httpServletResponse.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return;
} captchaChallengeAsJpeg = jpegOutputStream.toByteArray(); // flush it in the response
httpServletResponse.setHeader("Cache-Control", "no-store");
httpServletResponse.setHeader("Pragma", "no-cache");
httpServletResponse.setDateHeader("Expires", 0);
httpServletResponse.setContentType("image/jpeg");
ServletOutputStream responseOutputStream =
httpServletResponse.getOutputStream();
responseOutputStream.write(captchaChallengeAsJpeg);
responseOutputStream.flush();
responseOutputStream.close();
} public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
} }

若导入这两个类时报错
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
原因:Eclipse默认把这些受訪问限制的API设成了ERROR。

仅仅要把Windows-Preferences-Java-Complicer-Errors/Warnings里面的Deprecated 
and restricted API中的Forbidden references(access rules)选为Warning就能够编译通过。

4.创建用来做验证的servlet
package com.xhc.jcaptcha;

import java.io.IOException;
import java.io.PrintWriter;
import java.net.HttpRetryException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import com.octo.captcha.service.CaptchaServiceException; public class ValidationServlet extends HttpServlet { public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws ServletException, IOException {
Boolean isResponseCorrect =Boolean.FALSE;
//remenber that we need an id to validate!
String captchaId = httpServletRequest.getSession().getId();
//retrieve the response
String response = httpServletRequest.getParameter("j_captcha_response");
// Call the Service method
httpServletResponse.setContentType("text/html;charset=utf-8");
PrintWriter wt=httpServletResponse.getWriter(); try {
isResponseCorrect = CaptchaServiceSingleton.getInstance().validateResponseForID(captchaId,
response);
if(isResponseCorrect){
wt.write("<a>验证码输入成功</a>");
}else{
wt.write("<a>验证码输入失败</a>");
}
} catch (CaptchaServiceException e) {
//should not happen, may be thrown if the id is not valid
}
} public void init() throws ServletException {
} }

5.配置web.xml
 
<servlet>
<servlet-name>ImageCaptchaServlet</servlet-name>
<servlet-class>com.xhc.jcaptcha.ImageCaptchaServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet>
<servlet-name>ValidationServlet</servlet-name>
<servlet-class>com.xhc.jcaptcha.ValidationServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ImageCaptchaServlet</servlet-name>
<url-pattern>/servlet/ImageCaptchaServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ValidationServlet</servlet-name>
<url-pattern>/servlet/ValidationServlet</url-pattern>
</servlet-mapping>

6.jsp页面
<body>
<form action="servlet/ValidationServlet" method="GET">
<input type="text" name="j_captcha_response">
<img src="servlet/ImageCaptchaServlet" height="50" width="100">
<input type="submit" value="提交" />
</form>
</body>

使用jcaptcha插件生成验证码的更多相关文章

  1. captcha.js一个生成验证码的插件,使用js和canvas生成

    一.captcha`captcha.js`是一个生成验证码的插件,使用js和canvas生成的,确保后端服务被暴力攻击,简单判断人机以及系统的安全性,体积小,功能多,支持配置. 验证码插件内容,包含1 ...

  2. Jquery 客户端生成验证码

    验证码的作用: 1.有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试,实际上是用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,腾讯的QQ社区),我们利用比较简 ...

  3. jcaptcha和kaptcha验证码使用入门【转】

    jcaptcha和kaptcha验证码使用入门 一.jcaptcha验证码使用 jcaptcha使用默认样式生成的验证码比较难以识别,所以需要自定义验证码的样式,包括,背景色.背景大小.字体.字体大小 ...

  4. 使用Servlet动态生成验证码

    最近在重新看了一遍servlert,看到篇优质博客推荐给大家:https://www.cnblogs.com/xdp-gacl/p/3798190.html 顺便把学习过程中的知识记录下来. 今天是如 ...

  5. 第二百七十节,Tornado框架-生成验证码图片,以及验证码结合Session验证

    Tornado框架-生成验证码图片,以及验证码结合Session验证 第一.生成验证码图片  生成验证码图片需要两个必须模块 1.python自带的random(随机模块) 2.Pillow()图像处 ...

  6. Java生成验证码(二)

    前一篇博客已经介绍了如何用Java servlet产生验证码,本篇继续介绍如何使用一些开源组件生成验证码 ————————————————————————————————————————————   ...

  7. JCaptcha+Memcache的验证码集群实现

    一.问题背景 为了防止垃圾信息发布机器人的自动提交攻击,采用CAPTCHA验证码来保护该模块,提高攻击者的成本. 二.验证码简介 全自动区分计算机和人类的图灵测试(Completely Automat ...

  8. 动态生成验证码———MVC版

    上面有篇博客也是写的验证码,但那个是适用于asp.net网站的. 今天想在MVC中实现验证码功能,弄了好久,最后还是看博友文章解决的,感谢那位博友. 首先引入生成验证码帮助类. ValidateCod ...

  9. laravel 生成验证码的方法

    在Laravel中有很多图片验证码的库可以使用,本篇介绍其中之一:gregwar/captcha,这个库比较简单,在Laravel中比较常用.下面我们就来介绍下使用细节: 首先, composer.j ...

随机推荐

  1. 中国移动Lumia机强制升级Windows10手机开发者预览版的方法

    [最新消息4-9]微软已经确定将于PST太平洋标准时间周五上午十点也就是北京时间本周六(4-11)凌晨一点推送更新Windows10手机预览版 但是推送更新的机型不包括Lumia Icon 和930 ...

  2. SqlServer学习-常用的sql语句-持续更新中

    1.获取数据库下的所有表名 select TABLE_NAME from information_schema.tables where TABLE_TYPE='Base TABLE' 2.随机取出1 ...

  3. 如何向expect脚本里面传递参数

    如何向expect脚本里面传递参数   比如下面脚本用来做ssh无密码登陆,自动输入确认yes和密码信息,用户名,密码,hostname通过参数来传递   ssh.exp   Python代码   # ...

  4. WordPress主题reBorn最新破解版发布

    今天上班的时候,没事浏览网页! 突然之间发现了这么一个标题,顿时让我产生了兴趣. 标题:WordPress主题reBorn最新破解版发布 不知道什么原因,现在原网址打不开了,可能是作者怕骚扰吧. 其实 ...

  5. 校网助手APP lua源码

    import 'android.webkit.WebView'webView.addJavascriptInterface({},'JsInterface') import 'test' cjson= ...

  6. (转)SqlServer2008开启客户端远程连接

    原文地址:http://wenku.baidu.com/link?url=MiiJG0SKUUAb3kzrrQtdx0zGIDpsGa7vcGlzqIDe7qcFx5NJ4UlVoPIswxZCHMo ...

  7. text-shadow的用法详解

    1.兼容性:text-shadow 和 box-shadow 这两个属性在主流现代浏览器上得到了很好的支持( > Chrome 4.0, > Firefox 3.5, > Safar ...

  8. 如何把mysql的列修改成行显示数据简单实现

    如何把mysql的列修改成行显示数据简单实现 创建测试表: 1: DROP TABLE IF EXISTS `test`; 2: CREATE TABLE `test` ( 3: `year` int ...

  9. git 分支处理

    git 创建常用(多)分支(如:Master 主分支.Develop 分.Feature 功能分支.Release 预发布分支.Hotfix(或者Fixbug) 分支)步骤1.mkdir 项目名    ...

  10. form表单清空、重置

    form_live为formID <input type="button" value="重置" onclick="$('#form_live' ...