首页 / 操作系统 / Linux / SpringMVC项目中使用Google Kaptcha 生成验证码
前言:Google Captcha 是Google生成验证码的一个工具类,其原理是将随机生成字符串保存到session中,同时以图片的形式返回给页面,之后前台页面提交到后台进行对比。
1、jar包准备
官方提供的pom应该是<dependency><groupId>com.google.code.kaptcha</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version></dependency>但是下载不下来,我在阿里的maven仓库找到的pom如下:<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version></dependency>测试可以正常下载,这里推荐阿里的maven仓库,下载速度还行,挺稳定,附地址:http://maven.aliyun.com/nexus/#welcome2、spring bean的配置
1 <!-- google kaptcha的相关配置--> 2 <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha"> 3 <property name="config"> 4 <bean class="com.google.code.kaptcha.util.Config"> 5 <constructor-arg> 6 <props>7 <!-- 是否有边框 可选yes 或者 no -->8 <prop key="kaptcha.border">yes</prop> 9 <!-- 边框颜色 -->10 <prop key="kaptcha.border.color">105,179,90</prop>11 <!-- 验证码文本字符颜色 -->12 <prop key="kaptcha.textproducer.font.color">blue</prop>13 <!-- 验证码文本字符大小 -->14 <prop key="kaptcha.textproducer.font.size">45</prop>15 <!-- 验证码图片的宽度 默认200 -->16 <prop key="kaptcha.image.width">125</prop>17 <!-- 验证码图片的高度 默认50 -->18 <prop key="kaptcha.image.height">45</prop>19 <!-- 验证码文本字符长度默认为5 -->20 <prop key="kaptcha.textproducer.char.length">4</prop>21 <!-- 验证码文本字体样式默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)-->22 <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>23 </props>24 </constructor-arg>25 </bean>26 </property>27 </bean>3、Controller的两个方法
1 package com.ccg.controller; 23 import java.awt.image.BufferedImage; 4 import java.io.IOException; 5 import java.io.PrintWriter; 67 import javax.annotation.Resource; 8 import javax.imageio.ImageIO; 9 import javax.servlet.ServletOutputStream;10 import javax.servlet.http.HttpServletRequest;11 import javax.servlet.http.HttpServletResponse;12 import javax.servlet.http.HttpSession;13 14 import org.springframework.stereotype.Controller;15 import org.springframework.web.bind.annotation.RequestMapping;16 import org.springframework.web.bind.annotation.RequestParam;17 import org.springframework.web.servlet.ModelAndView;18 19 import com.google.code.kaptcha.Constants;20 import com.google.code.kaptcha.Producer;21 22 @Controller23 @RequestMapping("captcha")24 public class CaptchaController {25 26 @Resource27 private Producer captchaProducer;28 /**29* 30*获取验证码图片31* @author ccg32* @param request33* @param response34* @return35* @throws IOException36* Created2017年1月17日 下午5:07:2837*/38 @RequestMapping("getCaptchaCode")39 public ModelAndView getCaptchaCode(HttpServletRequest request, HttpServletResponse response) throws IOException{40 HttpSession session = request.getSession();41 42 response.setDateHeader("Expires", 0);43 response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");44 response.addHeader("Cache-Control", "post-check=0, pre-check=0");45 response.setHeader("Pragma", "no-cache");46 response.setContentType("image/jpeg"); 47 48 //生成验证码文本49 String capText = captchaProducer.createText();50 session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);51 System.out.println("生成验证码文本===="+capText);52 //利用生成的字符串构建图片53 BufferedImage bi = captchaProducer.createImage(capText);54 ServletOutputStream out = response.getOutputStream();55 ImageIO.write(bi, "jpg", out);56 57 try {58 out.flush();59 } finally {60 out.close();61 }62 return null;63 }64 65 /**66* 67*前端输入的验证码与生成的对比68* @author ccg69* @param request70* @param response71* @param captchaCode72* Created2017年1月17日 下午5:34:2373*/74 @RequestMapping("checkCaptchaCode")75 public void checkCaptchaCode(HttpServletRequest request, HttpServletResponse response,@RequestParam("captchaCode") String captchaCode){76 System.out.println("页面输入验证码===="+captchaCode);77 78 response.setCharacterEncoding("UTF-8");79 response.setHeader("Pragma", "No-cache");80 response.setHeader("Cache-Control", "no-cache");81 response.setDateHeader("Expires", 0);82 83 String generateCode =(String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);84 String result = "";85 if(generateCode.equals(captchaCode)){86 result = "验证成功";87 }else{88 result = "输入错误";89 }90 PrintWriter out = null;91 try {92 out = response.getWriter();93 } catch (IOException e) {94 e.printStackTrace();95 }96 out.print(result);97 out.flush();98 }99 }4、前台页面代码
1 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 3 <html> 4 <head> 5 <script src="${pageContext.request.contextPath}/js/jquery.min.js" type="text/javascript"></script> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body>10 生成的验证码:<img id="changeCaptcha" src="http://127.0.0.1/captcha/getCaptchaCode.htm"> <a href="javascript:changeCaptcha()">看不清,换一张</a>11 <br>12 <br>13 请输入验证码:<input id="captchaCode" type="text"> <input type="button" value="提交验证" onclick="checkCaptcha()">14 </body>15 <script type="text/javascript">16 //获取验证码图片 17 function changeCaptcha(){18 $("#changeCaptcha").attr("src","http://127.0.0.1/captcha/getCaptchaCode.htm");19 }20 //验证输入的验证码 21 function checkCaptcha(){22 var captchaCode = $("#captchaCode").val();23 $.ajax({24 type:"post",25 async : false,26 url:"http://127.0.0.1/captcha/checkCaptchaCode.htm",27 data:{"captchaCode" : captchaCode},28 success:function(res){29 alert(res);30 }31 });32 }33 </script>34 </html>需要注意到引用了jquery.min.js5、运行效果
附Google Captcha 可配置项 1 kaptcha.border是否有边框默认为true我们可以自己设置yes,no 2 kaptcha.border.color 边框颜色 默认为Color.BLACK 3 kaptcha.border.thickness边框粗细度默认为1 4 kaptcha.producer.impl 验证码生成器默认为DefaultKaptcha 5 kaptcha.textproducer.impl 验证码文本生成器默认为DefaultTextCreator 6 kaptcha.textproducer.char.string 验证码文本字符内容范围默认为abcde2345678gfynmnpwx 7 kaptcha.textproducer.char.length 验证码文本字符长度默认为5 8 kaptcha.textproducer.font.names验证码文本字体样式默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) 9 kaptcha.textproducer.font.size 验证码文本字符大小默认为4010 kaptcha.textproducer.font.color验证码文本字符颜色默认为Color.BLACK11 kaptcha.textproducer.char.space验证码文本字符间距默认为212 kaptcha.noise.impl验证码噪点生成对象默认为DefaultNoise13 kaptcha.noise.color 验证码噪点颜色 默认为Color.BLACK14 kaptcha.obscurificator.impl 验证码样式引擎默认为WaterRipple15 kaptcha.word.impl 验证码文本字符渲染 默认为DefaultWordRenderer16 kaptcha.background.impl 验证码背景生成器 默认为DefaultBackground17 kaptcha.background.clear.from 验证码背景颜色渐进 默认为Color.LIGHT_GRAY18 kaptcha.background.clear.to 验证码背景颜色渐进 默认为Color.WHITE19 kaptcha.image.width 验证码图片宽度默认为20020 kaptcha.image.height验证码图片高度默认为50 以上,有问题欢迎留言~本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139659.htm