1,导入jcaptcha.jar包,这里用的是1.0版本

2,编写captcha-context.xml配置文件(非必须,可在spring配置文件中直接添加):

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd">
  6.  
  7. <bean id="captchaService" class="com.octo.captcha.service.multitype.GenericManageableCaptchaService">
  8. <constructor-arg index="0" ref="imageEngine"/>
  9. <constructor-arg type="int" index="1" value="180"/>
  10. <constructor-arg type="int" index="2" value="100000"/>
  11. <constructor-arg type="int" index="3" value="75000"/>
  12. </bean>
  13. <bean id="imageEngine" class="com.octo.captcha.engine.GenericCaptchaEngine">
  14. <constructor-arg index="0">
  15. <list>
  16. <ref bean="captchaFactory"/>
  17. </list>
  18. </constructor-arg>
  19. </bean>
  20.  
  21. <bean id="captchaFactory" class="com.octo.captcha.image.gimpy.GimpyFactory">
  22. <constructor-arg>
  23. <ref bean="wordgen"/>
  24. </constructor-arg>
  25. <constructor-arg>
  26. <ref bean="wordtoimage"/>
  27. </constructor-arg>
  28. </bean>
  29.  
  30. <bean id="wordgen" class= "com.octo.captcha.component.word.wordgenerator.RandomWordGenerator">
  31. <!--可选字符-->
  32. <constructor-arg>
  33. <value>0123456789</value>
  34. <!-- <value>abcdefghijklmnopquvwxyz</value> -->
  35. </constructor-arg>
  36. </bean>
  37.  
  38. <bean id="wordtoimage" class="com.octo.captcha.component.image.wordtoimage.ComposedWordToImage">
  39. <constructor-arg index="0">
  40. <ref bean="fontGenRandom"/>
  41. </constructor-arg>
  42. <constructor-arg index="1">
  43. <ref bean="backGenUni"/>
  44. </constructor-arg>
  45. <constructor-arg index="2">
  46. <ref bean="decoratedPaster"/>
  47. </constructor-arg>
  48. </bean>
  49.  
  50. <bean id="fontGenRandom" class="com.octo.captcha.component.image.fontgenerator.RandomFontGenerator">
  51. <!--最小字体-->
  52. <constructor-arg index="0">
  53. <value>16</value>
  54. </constructor-arg>
  55. <!--最大字体-->
  56. <constructor-arg index="1">
  57. <value>20</value>
  58. </constructor-arg>
  59. <constructor-arg index="2">
  60. <list>
  61. <bean class="java.awt.Font">
  62. <constructor-arg index="0"><value>Arial</value></constructor-arg>
  63. <constructor-arg index="1"><value>0</value></constructor-arg>
  64. <constructor-arg index="2"><value>12</value></constructor-arg>
  65. </bean>
  66. </list>
  67. </constructor-arg>
  68. </bean>
  69. <bean id="backGenUni" class="com.octo.captcha.component.image.backgroundgenerator.FunkyBackgroundGenerator">
  70. <!--背景宽度-->
  71. <constructor-arg index="0">
  72. <value>90</value>
  73. </constructor-arg>
  74. <!--背景高度-->
  75. <constructor-arg index="1">
  76. <value>30</value>
  77. </constructor-arg>
  78. </bean>
  79.  
  80. <bean id="decoratedPaster" class="com.octo.captcha.component.image.textpaster.DecoratedRandomTextPaster">
  81. <!--最大字符长度-->
  82. <constructor-arg type="java.lang.Integer" index="0">
  83. <value>4</value>
  84. </constructor-arg>
  85. <!--最小字符长度-->
  86. <constructor-arg type="java.lang.Integer" index="1">
  87. <value>4</value>
  88. </constructor-arg>
  89. <!--文本颜色-->
  90. <constructor-arg index="2">
  91. <ref bean="colorGen"/>
  92. </constructor-arg>
  93. <!--文本混淆-->
  94. <constructor-arg index="3">
  95. <list>
  96. <ref bean="baffleDecorator"/>
  97. </list>
  98. </constructor-arg>
  99. </bean>
  100. <bean id="baffleDecorator" class="com.octo.captcha.component.image.textpaster.textdecorator.BaffleTextDecorator">
  101. <constructor-arg type="java.lang.Integer" index="0"><value>1</value></constructor-arg>
  102. <constructor-arg type="java.awt.Color" index="1"><ref bean="colorWrite"/></constructor-arg>
  103. </bean>
  104. <bean id="colorGen" class="com.octo.captcha.component.image.color.SingleColorGenerator">
  105. <constructor-arg type="java.awt.Color" index="0">
  106. <ref bean="colorBlack"/>
  107. </constructor-arg>
  108. </bean>
  109. <bean id="colorWrite" class="java.awt.Color">
  110. <constructor-arg type="int" index="0">
  111. <value>255</value>
  112. </constructor-arg>
  113. <constructor-arg type="int" index="1">
  114. <value>255</value>
  115. </constructor-arg>
  116. <constructor-arg type="int" index="2">
  117. <value>255</value>
  118. </constructor-arg>
  119. </bean>
  120. <bean id="colorBlack" class="java.awt.Color">
  121. <constructor-arg type="int" index="0">
  122. <value>50</value>
  123. </constructor-arg>
  124. <constructor-arg type="int" index="1">
  125. <value>50</value>
  126. </constructor-arg>
  127. <constructor-arg type="int" index="2">
  128. <value>50</value>
  129. </constructor-arg>
  130. </bean>
  131. </beans>

3,编写JcaptchaServlet响应请求提供验证码输出:

  1. protected void doGet(HttpServletRequest request,
  2. HttpServletResponse response) throws ServletException, IOException {
  3.  
  4. byte[] captchaChallengeAsJpeg = null;
  5. // 输出jpg的字节流
  6. ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
  7. try {
  8. // get the session id that will identify the generated captcha.
  9. // the same id must be used to validate the response, the session id
  10. // is a good candidate!
  11.  
  12. String captchaId = session.getSessionId(request);
  13. BufferedImage challenge = captchaService.getImageChallengeForID(
  14. captchaId, request.getLocale());
  15. // a jpeg encoder
  16. JPEGImageEncoder jpegEncoder = JPEGCodec
  17. .createJPEGEncoder(jpegOutputStream);
  18. jpegEncoder.encode(challenge);
  19. } catch (IllegalArgumentException e) {
  20. response.sendError(HttpServletResponse.SC_NOT_FOUND);
  21. return;
  22. } catch (CaptchaServiceException e) {
  23. response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
  24. return;
  25. }
  26.  
  27. captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
  28.  
  29. // flush it in the response
  30. response.setHeader("Cache-Control", "no-store");
  31. response.setHeader("Pragma", "no-cache");
  32. response.setDateHeader("Expires", 0);
  33. response.setContentType("image/" + CAPTCHA_IMAGE_FORMAT);
  34.  
  35. ServletOutputStream responseOutputStream = response.getOutputStream();
  36. responseOutputStream.write(captchaChallengeAsJpeg);
  37. responseOutputStream.flush();
  38. responseOutputStream.close();
  39. }

4,在web.xml中添加该servlet:

  1. <!-- Jcaptcha -->
  2. <servlet>
  3. <servlet-name>Jcaptcha</servlet-name>
  4. <servlet-class>cn.xxx.JcaptchaServlet</servlet-class>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>Jcaptcha</servlet-name>
  8. <url-pattern>/captcha.jpg</url-pattern>
  9. </servlet-mapping>

5,在html中显示验证码只需要以下代码:

  1. <div><img src="${base }/captcha.jpg" onclick="this.src='${base}/captcha.jpg?'+Math.random()"/></div>
  2. <div class="input_capt">验证码: <input type="text"id="captcha" name="captcha" />

6,后台验证的话,只需要调用ImageCaptchaService的一个方法即可:

  1. imageCaptchaService.validateResponseForID(session.getSessionId(getRequest()), captcha);

Spring+JCaptcha验证码使用示例的更多相关文章

  1. Spring @Transactional使用的示例

    Spring @Transactional使用的示例: 参考: http://blog.csdn.net/seng3018/article/details/6690527 http://blog.si ...

  2. spring原理案例-基本项目搭建 03 创建工程运行测试 spring ioc原理实例示例

    下面开始项目的搭建 使用 Java EE - Eclipse 新建一 Dynamic Web Project Target Runtime 选 Apache Tomcat 7.0(不要选 Apache ...

  3. Spring中的IOC示例

    Spring中的IOC示例 工程的大概内容是: 一个人在中国时用中国话问候大家,在国外时用英语问候大家. 其中, IHelloMessage是接口,用来定义输出问候信息 public interfac ...

  4. jQuery实现倒计时重新发送短信验证码功能示例

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. 由Nginx反向代理引出的JCaptcha验证码验证失败的问题

    搜索关键字: 1)Windows本地开发正常,部署到Linux远程服务器上JCaptcha验证失败 2)Linux远程服务器上JCpatcha验证失败 3)Nginx反向代理后JCaptcha验证失败 ...

  6. 手写Mybatis和Spring整合简单版示例窥探Spring的强大扩展能力

    Spring 扩展点 **本人博客网站 **IT小神 www.itxiaoshen.com 官网地址****:https://spring.io/projects/spring-framework T ...

  7. 【译】Spring 4 @Profile注解示例

    前言 译文链接:http://websystique.com/spring/spring-profile-example/ 本文将探索Spring中的@Profile注解,可以实现不同环境(开发.测试 ...

  8. Spring学习总结(六)——Spring整合MyBatis完整示例

    为了梳理前面学习的内容<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>,做一个完整的示例完成一个简 ...

  9. Spring集成MyBatis完整示例

    该文详细的通过Spring IOC.MyBatis.Servlet.Maven及Spring整合MyBatis的等技术完成一个简单的图书管理功能,实现图书列表.删除.多删除.编辑.新增功能.梳理前面学 ...

随机推荐

  1. Package 'sun-java6-jdk' has no installation candidate 解决方式【转】

    本文转载自:http://www.cnblogs.com/changefuture/archive/2012/06/19/2554876.html 解决方式: sudo add-apt-reposit ...

  2. Entityframework连接Mysql遇到的问题

    1.mysql.data.entity的版本一定要与mysql-connector-net的版本保持一致,我用的版本是6.9.12 2.有时会遇到连接MySQL数据库时提示missing server ...

  3. C语言 写的 表达式求值。

    有不对的地方还望指出来,让我改正.谢谢.存一个代码 #include<stdio.h> #include<stdlib.h> #include<string.h> ...

  4. C++之const类成员变量,const成员函数

    const修饰类的成员函数 const修饰变量一般有两种方式:const T *a,或者 T const *a,这两者都是一样的,主要看const位于*的左边还是右边,这里不再赘述,主要来看一下当co ...

  5. xen添加网卡

    brctl addbr xenbr0 ifconfig xenbr0 up ifconfig xenbr0 192.168.0.1 /etc/xen/scripts/network-bridge st ...

  6. Qt5.7不能加载MySql驱动问题.(需要重新编译驱动)

    转自:http://blog.csdn.net/qq_28851503/article/details/52422302 首先贴上我遇到的问题,如下: QSqlDatabase: QMYSQL dri ...

  7. java:calendar类及一些比较实用的utils(二)

    在这里将我在项目中用到的一些关于使用Calendar的utils分享出来,只是一部分,后期遇到好的通用方法会继续添加,以和大家交流学习,如果你还不熟悉这个类的使用,但是急需某个util,可以加群:41 ...

  8. Python_XML的三种解析方法

    什么是XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这 ...

  9. sql语句之正则表达式

    select * from employee where name regexp '^jin' select * from employee where name regexp '^jin.*(g|n ...

  10. 微信小程序开发之页面wxml里面实现循环 wx:for

    js代码: Page({ data:{ upploadimagelist:{},    //上报图片列表 js数组 }}) 后台数据库保存的格式:{"imageList":[{&q ...