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(); } }
相关推荐
jCaptcha是Java验证码解决方案的一个开源项目,它提供了丰富的功能和自定义选项,使得开发者能够轻松地在Web应用中集成验证码服务。jCaptcha-1.0-all.jar是这个项目的完整打包文件,包含了所有必要的类和库,可以...
7. **jcaptcha自定义验证码例子** 验证码的自定义示例可能包括更改验证码长度、字符集、背景颜色、扭曲程度等,以提高安全性并提升用户体验。 8. **Hibernate Interceptor** Hibernate拦截器允许在特定事件(如...
jcaptcha 例子 自定义的验证码例子
通过这些文档,开发者可以学习如何配置jCaptcha,如何自定义验证码的外观,以及如何处理验证结果。 fisheyebackgrounds和gimpybackgrounds两个目录可能存储了jCaptcha的背景图片模板。jCaptcha支持各种复杂的背景...
JCaptcha本身是一种强大的、可自定义的图像验证码库,旨在防止自动机器人和恶意软件对网站进行非法操作。在Struts2项目中添加JCaptcha验证可以有效保护表单提交的安全性,防止机器人或爬虫程序进行无效或恶意的提交...
描述中提到的“jcaptcha”是Java验证码库的简称,它的主要目标是提供可自定义且具有高可用性的图像验证码服务。jcaptcha生成的验证码是动态的,包含扭曲的字母和数字,这使得人类用户能够识别但机器难以解析,从而...
在Java中实现验证码可以使用多种方法,例如使用开源库如 JCaptcha 或 SimpleCaptcha。不过,由于描述中提到的是"验证码源码",我们可以假设这是自定义实现的简单版本。一个基本的实现可能包括以下步骤: - 生成随机...