简单Maven的Web项目之验证码(Kaptcha篇)

一:Kaptcha介绍

简单介绍:

kaptcha 是一个扩展自 simplecaptcha 的验证码库,在 Java 编程中 是一个非常实用的验证码生成工具。我们可以利用这个工具生成各种样式的验证码,因为它是可配置的,我们可以根据需求定制。 工作原理:

kaptcha 的工作原理是调用 com.google.code.kaptcha.servlet.KaptchaServlet ,生成一个验证码图片,响应到客户端,同时将生成的真是的验证码字符串放到 HttpSession 中。 使用kaptcha可以方便的配置:

二:使用Kaptcha生成验证码

首先下载jar包

下载地址: 然后添加到本地Maven库中命令如下可根据自己情况修改对应路径

mvn install:installcomD:jar

pom.xml中的配置如下,,注意要和上面的groupId、artifactId和version保持一致

>kaptcha>下面看代码 ChineseText.javapackage com.verify.kaptcha;import java.util.Random;import com.google.code.kaptcha.text.TextProducer;import com.google.code.kaptcha.util.Configurable;{public String getText() {int length = getConfig().getTextProducerCharLength();//char[] charS = getConfig().getTextProducerCharString();String[] s = new String[]{“验”,”证”,”码”,”测”,”试”};Random rand = new Random();StringBuffer sb = new StringBuffer();for(int i = 0; i < length; i++){int ind = rand.nextInt(s.length);sb.append(s[ind]);}return sb.toString();}/*** 中午实例* @return*/public String getText1() {int length = getConfig().getTextProducerCharLength();String finalWord = “”, firstWord = “”;int tempInt = 0;String[] array = { “0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”,”a”, “b”, “c”, “d”, “e”, “f”,”g”,”h”,”i”,”j”,”k”,”l”,”m”,”n”,”o”,”p”,”q”,”r”,”s”,”t”,”u”,”v”,”w”,”x”,”y”,”z” };Random rand = new Random();for (int i = 0; i < length; i++) {switch (rand.nextInt(array.length)) {case 1:tempInt = rand.nextInt(26) + 65;firstWord = String.valueOf((char) tempInt);break;case 2:int r1,r2,r3,r4;String strH,strL;// high&lowr1 = rand.nextInt(3) + 11; // 前闭后开[11,14)if (r1 == 13) {r2 = rand.nextInt(7);} else {r2 = rand.nextInt(16);}r3 = rand.nextInt(6) + 10;if (r3 == 10) {r4 = rand.nextInt(15) + 1;} else if (r3 == 15) {r4 = rand.nextInt(15);} else {r4 = rand.nextInt(16);}strH = array[r1] + array[r2];strL = array[r3] + array[r4];byte[] bytes = new byte[2];bytes[0] = (byte) (Integer.parseInt(strH, 16));bytes[1] = (byte) (Integer.parseInt(strL, 16));firstWord = new String(bytes);break;default:tempInt = rand.nextInt(10) + 48;firstWord = String.valueOf((char) tempInt);break;}finalWord += firstWord;}return finalWord;}}

生成验证码的servlet

package com.verify.kaptcha;import java.awt.image.BufferedImage;import java.io.IOException;import java.util.Enumeration;import java.util.Properties;import javax.imageio.ImageIO;import javax.servlet.Servlet;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 com.google.code.kaptcha.Producer;import com.google.code.kaptcha.util.Config;{/****/serialVersionUID = 1L;private Properties props;private Producer kaptchaProducer;private String sessionKeyValue;public KaptchaServlet() {this.props = new Properties();this.kaptchaProducer = null;this.sessionKeyValue = null;}(ServletConfig conf) throws ServletException {super.init(conf);ImageIO.setUseCache(false);@SuppressWarnings(“rawtypes”)Enumeration initParams = conf.getInitParameterNames();while (initParams.hasMoreElements()) {String key = (String) initParams.nextElement();String value = conf.getInitParameter(key);this.props.put(key, value);}Config config = new Config(this.props);this.kaptchaProducer = config.getProducerImpl();this.sessionKeyValue = config.getSessionKey();}(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.setDateHeader(“Expires”, 0L);resp.setHeader(“Cache-Control”, “no-store, no-cache, must-revalidate”);resp.addHeader(“Cache-Control”, “post-check=0, pre-check=0”);resp.setHeader(“Pragma”, “no-cache”);resp.setContentType(“image/jpeg”);String capText = this.kaptchaProducer.createText();String s1 = capText.substring(0, 1);String s2 = capText.substring(1, 2);int r = Integer.valueOf(s1).intValue() + Integer.valueOf(s2).intValue();req.getSession().setAttribute(this.sessionKeyValue, String.valueOf(r));BufferedImage bi = this.kaptchaProducer.createImage(s1+”+”+s2+”=?”);ServletOutputStream out = resp.getOutputStream();ImageIO.write(bi, “jpg”, out);try {out.flush();} finally {out.close();}}}”过去酒逢知已千杯少,现在酒逢千杯知已少”。

简单Maven的Web项目之验证码(Kaptcha篇)

相关文章:

你感兴趣的文章:

标签云: