SpringMvc项目中使用GoogleKaptcha 生成验证码
前言: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/#welcome
2、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; 2 3 import java.awt.image.BufferedImage; 4 import java.io.IOException; 5 import java.io.PrintWriter; 6 7 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 @Controller 23 @RequestMapping("captcha") 24 public class CaptchaController { 25 26 @Resource 27 private Producer captchaProducer; 28 /** 29 * 30 * 获取验证码图片 31 * @author ccg 32 * @param request 33 * @param response 34 * @return 35 * @throws IOException 36 * Created 2017年1月17日 下午5:07:28 37 */ 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 ccg 69 * @param request 70 * @param response 71 * @param captchaCode 72 * Created 2017年1月17日 下午5:34:23 73 */ 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="提交验证" οnclick="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.js
5、运行效果
附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 验证码文本字符大小 默认为40 10 kaptcha.textproducer.font.color 验证码文本字符颜色 默认为Color.BLACK 11 kaptcha.textproducer.char.space 验证码文本字符间距 默认为2 12 kaptcha.noise.impl 验证码噪点生成对象 默认为DefaultNoise 13 kaptcha.noise.color 验证码噪点颜色 默认为Color.BLACK 14 kaptcha.obscurificator.impl 验证码样式引擎 默认为WaterRipple 15 kaptcha.word.impl 验证码文本字符渲染 默认为DefaultWordRenderer 16 kaptcha.background.impl 验证码背景生成器 默认为DefaultBackground 17 kaptcha.background.clear.from 验证码背景颜色渐进 默认为Color.LIGHT_GRAY 18 kaptcha.background.clear.to 验证码背景颜色渐进 默认为Color.WHITE 19 kaptcha.image.width 验证码图片宽度 默认为200 20 kaptcha.image.height 验证码图片高度 默认为50
以上,有问题欢迎留言~
转载于:https://www.cnblogs.com/FlyHeLanMan/p/6293991.html
SpringMvc项目中使用GoogleKaptcha 生成验证码相关推荐
- java手机验证码登陆_在Web项目中手机短信验证码实现的全过程记录
这篇文章主要给大家介绍了关于在Web项目中实现短信验证码的全过程记录,文中通过示例代码介绍的非常详细,在文末跟大家提供了源码下载,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧. 前言 最近在做 ...
- spring mvc项目中利用freemarker生成自定义标签
2019独角兽企业重金招聘Python工程师标准>>> spring mvc项目中利用freemarker生成自定义标签 博客分类: java spring mvc +freemar ...
- SpringMVC项目中,jsp文件无法显示从Controller中传递过来的ModelAndView的模型数据
问题: SpringMVC项目中, jsp文件无法显示从Controller类中传递过来的ModelAndView的模型数据 原因: 并不是所有的jsp页面都支持EL表达式的, 它与web.xml版本 ...
- SpringMVC项目中中文字符乱码问题及解决办法总结(非专业最优解决办法) -- ajax传值乱码; request.getParameter()乱码;
SpringMVC项目中中文字符乱码问题及解决办法总结(非专业最优解决办法) -- ajax传值乱码; request.getParameter()乱码; 参考文章: (1)SpringMVC项目中中 ...
- 关于gradle项目中使用queryDsl生成Q类的问题的解决方式
关于gradle项目中使用queryDsl生成Q类的问题的解决方式 1.在idea中勾选下面的选项 2.检查实体类上是否有@Entity注解 3.编译项目并检查项目中的Q类是否被编译 4.重新构建项目
- uniapp项目中使用canvas生成海报并保存、微信分享、发送至朋友圈
uniapp项目中使用canvas生成海报并保存.微信分享.发送至朋友圈 1.html <!-- 分享模态框 --><canvas canvas-id="poster&qu ...
- canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传
使用方法 项目中引入 npm install html2canvas html代码 //html代码 js代码 // 引入html2canvas import html2canvas from 'ht ...
- koa2 中使用 svg-captcha 生成验证码
1. 安装svg-captcha $ npm install --save svg-captcha 2. 使用方法 生成有4个字符的图片和字符串 const svgCaptcha = require( ...
- js和php中几种生成验证码的方式
之前做过取随机数和生成验证码的练习,都是通过取随机数作为数组下标,然后从数组中取值的方式(js): 1 /*验证码*/ 2 function sj_yzm(){ 3 //存一个包括数字和字母的数组 4 ...
最新文章
- 唯一索引和普通索引的选择
- 中国太阳能电池行业运营需求与十四五展望规划报告2022版
- 记录Nginx模块开发
- Mac升级自带ruby方法
- 正则表达式的三种模式【贪婪、勉强、侵占】的分析
- Halcon:立体匹配
- gradle相关配置内容解析
- MacBook随机关机,无法正常工作,如何解决
- python生成器推导式_python之推导式and生成器表达器笔记及面试坑
- 猿创征文|【实用工具tcping】ping tcping的区别,使用命令,超全超详细使用手册(建议收藏)
- 面试题数组L型输出思路
- 塔顶分凝器全凝器区别_(单选)在相同的回流比和塔顶蒸汽组成下,采用分凝器+全凝器的二元连续精馏塔与仅采用全凝器的塔相比,()...
- 精品基于Uniapp+SSM实现的作业管理app
- 计算机毕业设计android的云南旅游,美食攻略,产品预订app(源码+系统+mysql数据库+Lw文档)
- css3魔方3乘3每层旋转_CSS3 旋转魔方效果
- MySQL 子查询使用方式
- Davinci-国产开源数据可视化工具
- 20万、50万、100万年薪的算法工程师能力上有哪些差距?
- 无监控、不运维。运维系统架构设计附带思维导图
- 数美科技斩获36氪“WISE 2020数据智能最佳解决方案”