1.下载jcaptcha-all.jar (provided in bin-distribution),ehcache.jar ehcache site两个包
2.实例一个jcaptcha服务,注意,必须是单例模式的
import com.octo.captcha.service.image.ImageCaptchaService;
import com.octo.captcha.service.image.DefaultManageableImageCaptchaService;
public class CaptchaServiceSingleton {
private static ImageCaptchaService instance = new DefaultManageableImageCaptchaService();
public static ImageCaptchaService getInstance(){
return instance;
}
}
3.编写一个产生图片的servlet
import com.octo.captcha.service.CaptchaServiceException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
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 java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class ImageCaptchaServlet extends HttpServlet {
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
}
protected 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 =
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();
}
}
4。为servlet修改web.xml配置文件
<servlet>
<servlet-name>jcaptcha</servlet-name>
<servlet-class>ImageCaptchaServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jcaptcha</servlet-name>
<url-pattern>/jcaptcha</url-pattern>
</servlet-mapping>
5.编写你的客户端的展示
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>MyHtml.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
</head>
<body>
<form name="f1" id="f1" action="/testCapture/validateAction" method="get">
<table border="0">
<tr>
<td>验证码:</td>
<td><img src="jcaptcha"><input type='text' name='j_captcha_response' value=''></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password" id="password"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit"></td>
</tr>
</table>
</form>
</body>
</html>
6.后台逻辑验证
import com.octo.captcha.service.CaptchaServiceException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
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 java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
public class ValidationServlet extends HttpServlet {
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
}
protected 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
try {
isResponseCorrect = CaptchaServiceSingleton.getInstance()
.validateResponseForID(captchaId, response);
} catch (CaptchaServiceException e) {
//should not happen, may be thrown if the id is not valid
}
System.out.println(isResponseCorrect);
}
}
分享到:
相关推荐
Java验证码生成库JCaptcha是一个广泛使用的开源项目,用于在Web应用程序中生成安全的、难以破解的验证码。这个库是用Java编写的,旨在提供一种可靠的方法来防止自动化的机器人或恶意脚本对网站进行非法操作,如批量...
本篇文章将详细讲解两个流行的验证码开源组件——Jcaptcha和Kaptcha,它们为开发者提供了便捷的方式来生成和验证图像验证码。 首先,Jcaptcha(Just Another CAPTCHA Toolkit)是一个强大的Java验证码框架,它提供...
Java验证码生成库JCaptcha是一个广泛使用的开源项目,它为Java应用程序提供了强大的安全验证工具。验证码(Completely Automated Public Turing test to tell Computers and Humans Apart)的主要目的是防止自动化...
Java验证码生成库JCaptcha是一个广泛使用的开源库,用于在Java应用程序中创建安全的、难以破解的验证码。验证码(CAPTCHA)的主要目的是防止自动化程序(如机器人或爬虫)进行恶意操作,例如注册虚假账户或进行大量...
Java验证码生成库JCaptcha是一个强大的工具,用于在Web应用程序中创建和验证安全的图形验证码。验证码的主要目的是防止自动机器人和恶意脚本进行未经授权的操作,如批量注册、恶意登录尝试等。下面将详细介绍...
JCaptcha作为一款开源验证码组件,为Java开发者提供了灵活的验证码解决方案。虽然在某些方面可能不如商业产品强大,但对于很多项目来说,其功能已经足够满足需求,并且可以通过自定义扩展以适应特定场景。学习和掌握...
Struts验证码插件JCaptcha4Struts2是一个用于Java Web应用的安全组件,旨在防止自动化的机器人或恶意软件通过表单提交进行欺诈性操作。在Web开发中,验证码(CAPTCHA)是一种常用的方法,用于区分人类用户和计算机...
该插件基于Java的开源项目JCaptcha(Just Another CAPTCHA)构建,提供了可视化挑战响应测试,即我们通常所说的验证码。验证码的主要目的是验证用户是真实的人而不是自动化程序,以此来保护网站免受垃圾邮件、恶意...
Struts验证码插件JCaptcha4Struts2是一个用于Java Web应用的安全组件,旨在防止自动机器人或恶意用户通过自动化脚本进行非法操作,如批量注册、恶意登录等。这个插件结合了Struts2框架和JCaptcha库,为Struts2应用...
本文将深入探讨JCaptcha这个开源组件,它是Java环境下实现验证码生成的一个优秀工具。 JCaptcha(Java CAPTCHA)是一款强大的、可定制的验证码解决方案,由Gregg Sporar开发。它的主要目标是提供一种简单、高效的...
ptcha是一个开源的用来生成图形验证码的Java开源组件,使用起来也是非常的简单方便。 jcapthca是非常强大的,不光是可以生成图片式的验证码,还可以生成声音式的(新浪就使用了双重验证码)。 Jcaptcha是CAPTCHA里面...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
JCaptcha4Struts2插件是将Jcaptcha与Struts2框架集成的组件,使得开发者可以轻松地在Struts2应用中添加验证码功能。使用该插件,你可以实现以下功能: 1. **安装和配置**:在Struts2应用中,你需要将JCaptcha4...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
jCaptcha 是一个基于 Java 的开源验证码库,它提供了丰富的图形验证码解决方案。这个库的特点在于可以创建多彩且复杂的图像,这使得机器难以识别,但对人类来说相对容易辨认。 jCaptcha 的主要优点包括: 1. **可...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
总的来说,jcaptcha验证码所需jar包提供了一套完整的Java验证码解决方案,包含了处理HTTP请求的过滤器、日志记录工具以及核心的验证码生成和验证库。通过这些组件,开发者可以轻松地在Java Web应用中实现安全、可靠...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...