前言: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 生成验证码相关推荐

  1. java手机验证码登陆_在Web项目中手机短信验证码实现的全过程记录

    这篇文章主要给大家介绍了关于在Web项目中实现短信验证码的全过程记录,文中通过示例代码介绍的非常详细,在文末跟大家提供了源码下载,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧. 前言 最近在做 ...

  2. spring mvc项目中利用freemarker生成自定义标签

    2019独角兽企业重金招聘Python工程师标准>>> spring mvc项目中利用freemarker生成自定义标签 博客分类: java spring mvc +freemar ...

  3. SpringMVC项目中,jsp文件无法显示从Controller中传递过来的ModelAndView的模型数据

    问题: SpringMVC项目中, jsp文件无法显示从Controller类中传递过来的ModelAndView的模型数据 原因: 并不是所有的jsp页面都支持EL表达式的, 它与web.xml版本 ...

  4. SpringMVC项目中中文字符乱码问题及解决办法总结(非专业最优解决办法) -- ajax传值乱码; request.getParameter()乱码;

    SpringMVC项目中中文字符乱码问题及解决办法总结(非专业最优解决办法) -- ajax传值乱码; request.getParameter()乱码; 参考文章: (1)SpringMVC项目中中 ...

  5. 关于gradle项目中使用queryDsl生成Q类的问题的解决方式

    关于gradle项目中使用queryDsl生成Q类的问题的解决方式 1.在idea中勾选下面的选项 2.检查实体类上是否有@Entity注解 3.编译项目并检查项目中的Q类是否被编译 4.重新构建项目

  6. uniapp项目中使用canvas生成海报并保存、微信分享、发送至朋友圈

    uniapp项目中使用canvas生成海报并保存.微信分享.发送至朋友圈 1.html <!-- 分享模态框 --><canvas canvas-id="poster&qu ...

  7. canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传

    使用方法 项目中引入 npm install html2canvas html代码 //html代码 js代码 // 引入html2canvas import html2canvas from 'ht ...

  8. koa2 中使用 svg-captcha 生成验证码

    1. 安装svg-captcha $ npm install --save svg-captcha 2. 使用方法 生成有4个字符的图片和字符串 const svgCaptcha = require( ...

  9. js和php中几种生成验证码的方式

    之前做过取随机数和生成验证码的练习,都是通过取随机数作为数组下标,然后从数组中取值的方式(js): 1 /*验证码*/ 2 function sj_yzm(){ 3 //存一个包括数字和字母的数组 4 ...

最新文章

  1. 唯一索引和普通索引的选择
  2. 中国太阳能电池行业运营需求与十四五展望规划报告2022版
  3. 记录Nginx模块开发
  4. Mac升级自带ruby方法
  5. 正则表达式的三种模式【贪婪、勉强、侵占】的分析
  6. Halcon:立体匹配
  7. gradle相关配置内容解析
  8. MacBook随机关机,无法正常工作,如何解决
  9. python生成器推导式_python之推导式and生成器表达器笔记及面试坑
  10. 猿创征文|【实用工具tcping】ping tcping的区别,使用命令,超全超详细使用手册(建议收藏)
  11. 面试题数组L型输出思路
  12. 塔顶分凝器全凝器区别_(单选)在相同的回流比和塔顶蒸汽组成下,采用分凝器+全凝器的二元连续精馏塔与仅采用全凝器的塔相比,()...
  13. 精品基于Uniapp+SSM实现的作业管理app
  14. 计算机毕业设计android的云南旅游,美食攻略,产品预订app(源码+系统+mysql数据库+Lw文档)
  15. css3魔方3乘3每层旋转_CSS3 旋转魔方效果
  16. MySQL 子查询使用方式
  17. Davinci-国产开源数据可视化工具
  18. 20万、50万、100万年薪的算法工程师能力上有哪些差距?
  19. 无监控、不运维。运维系统架构设计附带思维导图
  20. 数美科技斩获36氪“WISE 2020数据智能最佳解决方案”

热门文章

  1. 如何写好技术文章(看张鑫旭老师的直播总结
  2. 60+ 实用 React 工具库,助力你高效开发!
  3. Sublime Text怎么快速建立一个html5页面模板
  4. [环境搭建]SDN网络感知服务与最短路径应用
  5. sh变量特性(3)默认特性
  6. Appium移动自动化测试之获取appPackage和appActivity
  7. android之实现各个组件点击事件处理
  8. 《Java程序员全攻略:从小工到专家》连载八:加入什么样的公司
  9. DOM Xerces类库使用方法
  10. 七招挽回受损WORD文档