你的位置:首页 > Java教程

[Java教程]验证码实用工具Jtaptcha

CAPTCHA是Completely Automated Public Turing Test to Tell Computers and Humans Apart

全自动区分计算机和人类的图灵测试的简称

1.引入jar包

jcaptcha-1.0.jar

2.配置mvc整合文件 ***.

<!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 -->  <context-param>    <param-name>contextConfigLocation</param-name>    <param-value>classpath:applicationContext*.class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>    <init-param>      <param-name>encoding</param-name>      <param-value>UTF-8</param-value>    </init-param>  </filter>

View Code

 2.1 ***.

<?  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"  default-lazy-init="true">  <!--kaptcha验证码    <bean id="captchaProducer"      class="com.google.code.kaptcha.impl.DefaultKaptcha">      <property name="config">        <bean class="com.google.code.kaptcha.util.Config">          <constructor-arg type="java.util.Properties">            <value>kaptcha.border=yes</value>          </constructor-arg>        </bean>      </property>    </bean>    -->  <bean id="captchaService" class="com.octo.captcha.service.multitype.GenericManageableCaptchaService">    <constructor-arg index="0" ref="imageEngine"/>    <constructor-arg type="int" index="1" value="180"/>    <constructor-arg type="int" index="2" value="100000"/>    <constructor-arg type="int" index="3" value="75000"/>  </bean>  <bean id="imageEngine" class="com.octo.captcha.engine.GenericCaptchaEngine">    <constructor-arg index="0">      <list>        <ref bean="captchaFactory"/>      </list>    </constructor-arg>  </bean>  <bean id="captchaFactory" class="com.octo.captcha.image.gimpy.GimpyFactory">    <constructor-arg>      <ref bean="wordgen"/>    </constructor-arg>    <constructor-arg>      <ref bean="wordtoimage"/>    </constructor-arg>  </bean>  <bean id="wordgen" class= "com.octo.captcha.component.word.wordgenerator.RandomWordGenerator">        <!--可选字符-->    <constructor-arg>      <value>aabbccddeefgghhkkmnnooppqqsstuuvvwxxyyzz</value>    </constructor-arg>  </bean>  <bean id="wordtoimage" class="com.octo.captcha.component.image.wordtoimage.ComposedWordToImage">    <constructor-arg index="0">      <ref bean="fontGenRandom"/>    </constructor-arg>    <constructor-arg index="1">      <ref bean="backGenUni"/>    </constructor-arg>    <constructor-arg index="2">      <ref bean="decoratedPaster"/>    </constructor-arg>  </bean>  <bean id="fontGenRandom" class="com.octo.captcha.component.image.fontgenerator.RandomFontGenerator">    <!--最小字体-->    <constructor-arg index="0">      <value>14</value>    </constructor-arg>    <!--最大字体-->    <constructor-arg index="1">      <value>20</value>    </constructor-arg>    <constructor-arg index="2">      <list>        <bean class="java.awt.Font">          <constructor-arg index="0"><value>Arial</value></constructor-arg>          <constructor-arg index="1"><value>0</value></constructor-arg>          <constructor-arg index="2"><value>32</value></constructor-arg>        </bean>      </list>    </constructor-arg>  </bean>  <bean id="backGenUni" class="com.octo.captcha.component.image.backgroundgenerator.UniColorBackgroundGenerator">    <!--背景宽度-->    <constructor-arg index="0">      <value>80</value>    </constructor-arg>    <!--背景高度-->    <constructor-arg index="1">      <value>28</value>    </constructor-arg>  </bean>  <bean id="decoratedPaster" class="com.octo.captcha.component.image.textpaster.DecoratedRandomTextPaster">    <!--最大字符长度-->    <constructor-arg type="java.lang.Integer" index="0">      <value>4</value>    </constructor-arg>    <!--最小字符长度-->    <constructor-arg type="java.lang.Integer" index="1">      <value>4</value>    </constructor-arg>    <!--文本颜色-->    <constructor-arg index="2">      <ref bean="colorGen"/>    </constructor-arg>    <!--文本混淆-->    <constructor-arg index="3">      <list>        <!--<ref bean="baffleDecorator"/>-->      </list>    </constructor-arg>  </bean>    <bean id="baffleDecorator" class="com.octo.captcha.component.image.textpaster.textdecorator.BaffleTextDecorator">    <constructor-arg type="java.lang.Integer" index="0"><value>1</value></constructor-arg>    <constructor-arg type="java.awt.Color" index="1"><ref bean="colorWrite"/></constructor-arg>  </bean>  <bean id="colorGen" class="com.octo.captcha.component.image.color.SingleColorGenerator">    <constructor-arg type="java.awt.Color" index="0">      <ref bean="colorBlack"/>    </constructor-arg>  </bean>  <bean id="colorWrite" class="java.awt.Color">    <constructor-arg type="int" index="0">      <value>255</value>    </constructor-arg>    <constructor-arg type="int" index="1">      <value>255</value>    </constructor-arg>    <constructor-arg type="int" index="2">      <value>255</value>    </constructor-arg>  </bean>  <bean id="colorBlack" class="java.awt.Color">    <constructor-arg type="int" index="0">      <value>50</value>    </constructor-arg>    <constructor-arg type="int" index="1">      <value>50</value>    </constructor-arg>    <constructor-arg type="int" index="2">      <value>50</value>    </constructor-arg>  </bean></beans>

View Code

3.web.

<servlet>    <servlet-name>Jcaptcha</servlet-name>    <servlet-class>com.rbao.east.servlet.JcaptchaServlet</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>Jcaptcha</servlet-name>    <url-pattern>/captcha.svl</url-pattern>  </servlet-mapping>

View Code

4.建立提供验证码的servlet

import java.awt.image.BufferedImage;import java.io.IOException;import javax.imageio.ImageIO;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.io.output.ByteArrayOutputStream;import org.springframework.beans.factory.BeanFactoryUtils;import org.springframework.web.context.WebApplicationContext;import org.springframework.web.context.support.WebApplicationContextUtils;import com.octo.captcha.service.CaptchaServiceException;import com.octo.captcha.service.image.ImageCaptchaService;/** * 提供验证码图片的Servlet [email protected]("serial")public class JcaptchaServlet extends HttpServlet {  public static final String CAPTCHA_IMAGE_FORMAT = "jpeg";  private ImageCaptchaService captchaService;  @Override  public void init() throws ServletException {    WebApplicationContext appCtx = WebApplicationContextUtils        .getWebApplicationContext(getServletContext());    captchaService = (ImageCaptchaService) BeanFactoryUtils        .beanOfTypeIncludingAncestors(appCtx, ImageCaptchaService.class);      }  @Override  protected 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();      BufferedImage challenge = captchaService.getImageChallengeForID(          captchaId, request.getLocale());      // Jimi.putImage("image/jpeg", challenge, jpegOutputStream);      ImageIO.write(challenge, CAPTCHA_IMAGE_FORMAT, jpegOutputStream);    } catch (IllegalArgumentException e) {      response.sendError(HttpServletResponse.SC_NOT_FOUND);      return;    } catch (CaptchaServiceException e) {      response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);      return;    }    // catch (JimiException 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);    response.setContentType("image/" + CAPTCHA_IMAGE_FORMAT);    ServletOutputStream responseOutputStream = response.getOutputStream();    responseOutputStream.write(captchaChallengeAsJpeg);    responseOutputStream.flush();    responseOutputStream.close();  }}

View Code

刚开始写,也不知道怎么样,就先这样吧。记录一下自己在工作中遇到的一些技术或问题。