jar包: commons-collections.jar commons-logging.jar jcaptcha-1.0-all.jar public class MyImageSingleton { private static ImageCaptchaService instance =new DefaultManageableImageCaptchaService(); static { instance = new DefaultManageableImageCaptchaService( new FastHashMapCaptchaStore(), new MyImageCaptchaEngine(), 180, 100000, 75000); } public static ImageCaptchaService getMyInstance(){ return instance; } } ======================== public class MyImageCaptchaEngine extends ListImageCaptchaEngine { // 随机生成的字符组成 private static final String RANDOM_WORD_GENERATOR = "0123456789"; // 验证码图片上显示的字符个数 private static final int TEXT_SIZE = 4; //验证码图片上显示的字符的大小设置 private static final int TEXT_WIDTH = 12; private static final int TEXT_HEIGHT = 13; // 验证码图片的大小设置 private static final int IMAGE_CAPTCHA_WIDTH = 50; private static final int IMAGE_CAPTCHA_HEIGHT = 20; // protected void buildInitialFactories() { // // 随机生成的字符 // WordGenerator wgen = new RandomWordGenerator(RANDOM_WORD_GENERATOR); // RandomRangeColorGenerator cgen = new RandomRangeColorGenerator( // new int[]{ 0, 100 }, new int[]{ 0, 100 }, new int[]{ 0, 100 }); // // 文字显示的个数 // TextPaster textPaster = new RandomTextPaster(new Integer(TEXT_SIZE), // new Integer(TEXT_SIZE), cgen, Boolean.TRUE); // // 图片的大小 // BackgroundGenerator backgroundGenerator = new FunkyBackgroundGenerator( // new Integer(IMAGE_CAPTCHA_WIDTH), new Integer( // IMAGE_CAPTCHA_HEIGHT)); // // 字体格式 // Font[] fontsList = new Font[]{ new Font("Arial", 0, 12), // new Font("Tahoma", 0, 12), new Font("Verdana", 0, 12), }; // // 文字的大小 // FontGenerator fontGenerator = new RandomFontGenerator(new Integer( // TEXT_WIDTH), new Integer(TEXT_HEIGHT), fontsList); // // WordToImage wordToImage = new ComposedWordToImage(fontGenerator, // backgroundGenerator, textPaster); // this.addFactory(new GimpyFactory(wgen, wordToImage)); // } protected void buildInitialFactories() { WordGenerator wgen = new RandomWordGenerator("abcdefghijklmnopquvwxyz123456789"); RandomRangeColorGenerator cgen = new RandomRangeColorGenerator( new int[] {0, 100}, new int[] {0, 100}, new int[] {0, 100}); //文字显示4个数 TextPaster textPaster = new RandomTextPaster(new Integer(4), new Integer(4), cgen, true); //图片的大小 BackgroundGenerator backgroundGenerator = new FunkyBackgroundGenerator(new Integer(200), new Integer(45)); Font[] fontsList = new Font[] { new Font("Arial", 0, 10), new Font("Tahoma", 0, 10), new Font("Verdana", 0, 10), }; FontGenerator fontGenerator = new RandomFontGenerator(new Integer(20), new Integer(30), fontsList); WordToImage wordToImage = new ComposedWordToImage(fontGenerator, backgroundGenerator, textPaster); this.addFactory(new GimpyFactory(wgen, wordToImage)); } ================================== public class MyImageServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) 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 = request.getSession().getId(); // call the ImageCaptchaService getChallenge method BufferedImage challenge = MyImageSingleton.getMyInstance().getImageChallengeForID(captchaId, request.getLocale()); // a jpeg encoder 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); //输出JPEG response.setContentType("image/jpeg"); ServletOutputStream responseOutputStream = response.getOutputStream(); responseOutputStream.write(captchaChallengeAsJpeg); responseOutputStream.flush(); responseOutputStream.close(); } =========================== web xml <servlet> <servlet-name>MyImageServlet</servlet-name> <servlet-class>com.lch.test.checkimg.MyImageServlet</servlet-class> </servlet> <servlet> <servlet-name>MyCheckImg</servlet-name> <servlet-class>com.lch.test.checkimg.MyCheckImg</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyImageServlet</servlet-name> <url-pattern>/MyImageServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>MyCheckImg</servlet-name> <url-pattern>/MyCheckImg</url-pattern> </servlet-mapping> ========================jsp页面 <center> <form action="MyCheckImg" method="post"> <img src="MyImageServlet" mce_src="MyImageServlet" /> <input type="text" name="myword" value="" /> <input type="submit"/> </form> <center> ======================提交页面验证Servlet public class MyCheckImg extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try{ String sessionID=request.getSession().getId(); System.out.println(sessionID); String myword=request.getParameter("myword"); System.out.println(myword); PrintWriter pw= response.getWriter(); StringBuffer sb=new StringBuffer(); ///check boolean flg=CaptchaServiceSingleton.getInstance().validateResponseForID(sessionID, myword); if(flg){ sb.append("<font color='red'>check success!</font>"); System.out.println("验证成功!"); }else{ sb.append("<font color='red'>check lose!</font>"); System.out.println("验证失败!"); } pw.print(sb.toString()); pw.close(); }catch(Exception e){ System.out.println(); } }
相关推荐
在IT领域,`jCaptcha`(Just Another CAPTCHA)是一个非常流行的Java实现的验证码库,它提供了高度可定制的图像和音频验证码生成器。本文将详细介绍`jCaptcha`在基于`Acegi`安全框架的应用中的使用,以及如何设置一...
在JSP下,用jcaptcha生成彩色验证码的案例。 主页http://jcaptcha.sourceforge.net/ 网上有很多例子,但有一点没说清楚,这个项目的jar包需要两个apache的项目包,一个是collections,还有一个是logging。 我做了...
首先,JCaptcha 是一个开源的 Java 验证码库,它提供了丰富的定制选项,包括自定义干扰线和背景图片,以增加验证码的复杂性,从而降低被机器识别的可能性。以下是一些关键知识点: 1. **安装 JCaptcha**:在项目中...
jCaptcha是Java验证码解决方案的一个开源项目,它提供了丰富的功能和自定义选项,使得开发者能够轻松地在Web应用中集成验证码服务。jCaptcha-1.0-all.jar是这个项目的完整打包文件,包含了所有必要的类和库,可以...
JCaptcha提供了丰富的扩展点,允许开发者自定义验证码的样式和行为。例如,你可以编写自己的`Generator`实现,生成具有特定风格的验证码,或者实现更复杂的验证逻辑。 总结,Java JCaptcha验证码框架为开发者提供...
虽然Jcaptcha提供了丰富的自定义选项以增加验证码的复杂性,但你仍需要考虑其他安全措施,如限制同一IP地址尝试验证的次数,定期更换验证码图片,以及使用HTTPS来保护传输过程中的数据安全。 通过以上步骤,你可以...
1. **可定制性**:jCaptcha 允许开发者自定义验证码的生成规则,包括字体、颜色、背景、扭曲程度等,以增加其复杂性和安全性。 2. **无障碍性**:除了图像验证码,jCaptcha 还支持音频验证码,方便视觉障碍的用户...
Jcaptcha(Java 验证码生成框架)使用说明 一、框架概述 Jcaptcha 是一个 Java 验证码生成框架,提供了详细的说明及例程,通过调查实践后,总结的,希望对大家有帮助。该框架提供了生成验证码图像通用解决办法,...
### 安全性 + Jcaptcha (验证码) + MyBatis框架搭建详解 #### 一、项目背景与目标 本文档将详细介绍如何通过整合Spring Security、Jcaptcha和MyBatis框架来构建一个具备安全性验证功能的Web应用。此项目旨在创建一...
7. **jcaptcha自定义验证码例子** 验证码的自定义示例可能包括更改验证码长度、字符集、背景颜色、扭曲程度等,以提高安全性并提升用户体验。 8. **Hibernate Interceptor** Hibernate拦截器允许在特定事件(如...
JCaptcha 提供了丰富的自定义选项,如背景颜色、字体样式等,使得开发者可以根据实际需求定制验证码的外观。 ### 三、环境准备与依赖配置 #### 1. Maven Web App项目创建 假设项目名为 hjzl-app,首先需要在开发...
Jcaptcha提供了许多预定义的配置类,如`DefaultCaptchaProducerConfig`,也可以自定义配置。 4. **存储验证码**: - 生成的验证码需要临时存储,以便后续验证。常见的做法是将其值保存在服务器端的Session中,或者...
jcaptcha 例子 自定义的验证码例子
JCaptcha允许开发者自定义验证码的样式和行为,包括字体、颜色、噪声、扭曲程度等。通过继承`BasicCaptchaGenerator`并重写其方法,可以创建具有独特视觉效果的验证码。 5. **验证用户输入的验证码** 用户输入的...
在这个例子中,服务器端会返回一个Base64编码的验证码图片,然后前端将其解码并显示在页面上。 在实际应用中,你还可能需要实现一个接口来接收用户输入的验证码并进行验证。在验证过程中,确保保存了服务器生成的...
JcaptchaServlet、JcaptchaServlet验证码实例,是基本于Servlet编写的一个实例。供需要者下载,制作的一个captcha.jar包的实现。
jcaptcha 图片验证例子。JCaptcha 是一个用来生成验证码的开源Java类库,目前最新的版本是2.0。
这是一个基于acegi的jcaptcha的验证码例子,希望对正在学习的大家有所帮助
验证码生成与验证例子,验证码例子,验证码
我们可以自定义配置,如字体、颜色、噪声等,以确保生成的验证码既难以被机器识别,又易于人类阅读。 4. **服务层实现**: 在Spring的服务层,我们需要创建一个服务接口和其实现类,用于生成和验证验证码。服务...