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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wpsppt流程图联系效果_风险隐患排查的手段—HAZOP 与检查表的区别及应用效果

HAZOP 与检查表的区别HAZOP 分析可以在工厂运行周期内的任何时间段进行&#xff0c;既适用于设计阶段&#xff0c;也适用于在役的工艺装置。在化工项目的设计阶段采用HAZOP 方法进行分析&#xff0c;能识别设计、设备及操作程序中的潜在危险&#xff0c;比如装置设备是否装有安…

软件测试实验报告下载 实验一到实验五

实验一&#xff1a; 传送门在此&#xff1a;https://download.csdn.net/download/qq_44872173/15559951 目录如下&#xff1a;

linux网络编程之并发服务器的三种实现模型 (超级经典)

转载 &#xff1a; http://blog.csdn.net/tennysonsky/article/details/45671215 服务器设计技术有很多&#xff0c;按使用的协议来分有 TCP 服务器和 UDP 服务器&#xff0c;按处理方式来分有循环服务器和并发服务器。 循环服务器与并发服务器模型 在网络程序里面&#xff0c…

poj 1060 Modular multiplication of polynomials

方法&#xff08;无证明&#xff0c;lz弱渣请谅解&#xff09;&#xff1a; 以样例来讲&#xff1a;(x^6 x^4 x^2 x 1) (x^7 x 1) modulo (x^8 x^4 x^3 x 1) x^7 x^6 1 。 (x^6 x^4 x^2 x 1) (x^7 x 1) x^13 x^11 x^9 x^8 x^6 x^5 x^4 x^3 1 。 令a…

IT人的自我导向型学习:学习的4个层次

[原文链接] 谈起软件开发一定会想到用什么技术、采用什么框架&#xff0c;然而在盛行的敏捷之下&#xff0c;人的问题逐渐凸显出来。不少企业请人来培训敏捷开发技术&#xff0c;却发现并不能真正运用起来&#xff0c;其中一个主要原因就是大家还没有很好的学习能力。没有学习&…

.NET Core分析程序集最优美的方法,不用Assembly.LoadFile(),超越ReflectionOnlyLoad

在编写.NET程序的时候&#xff0c;如果需要对一个程序集文件进行分析&#xff0c;我们可以使用Assembly.LoadFile()来加载这个程序集&#xff0c;然后对LoadFile()方法返回的Assembly对象进行进一步的分析。但是Assembly.LoadFile()方法会以执行为目的把程序集加载到程序中&…

C#学习笔记——通用对话框

Visual Studio提供的通用对话框控件有&#xff1a;ColorDialog、FolderBrowserDialog、FontDialog、OpenFileDialog、SaveFileDialog、PageSetupDialog、PrintDialog和PrintPreviewDialog。 在使用这些中的某个“通用对话框”控件时&#xff0c;可以向窗体添加该控件&#xff0…

动态ram依靠什么存储信息_ROM、RAM、DRAM、SRAM和FLASH傻傻分不清

ROM、RAM、DRAM、SRAM和FLASH各类储存器在电脑、手机、电子设备、嵌入式设备及相应的开发中普遍应用的&#xff0c;但是很多还是傻傻分不清楚。下面就简单介绍下这几个吧&#xff01;ROM和RAMROM&#xff1a;只读存储器或者固化存储器&#xff1b;RAM&#xff1a;随机存取存储器…

软件项目管理课后题下载【共5个章(1、3、4、5、6)】

都整理好了&#xff0c;链接在此&#xff1a;https://download.csdn.net/download/qq_44872173/15560093 目录如下&#xff1a;

linux c之snprintf()和sprintf()区别

1、snprintf函数 int snprintf(char *str, size_t size, const char *format, ...); 将可变个参数(...)按照format格式化成字符串,然后将其复制到str中 (1) 如果格式化后的字符串长度 < size,则将此字符串全部复制到str中,并给其后添加一个字符串结束符(/0); (2) 如果…

Chrome中输入框默认样式移除

Chrome中输入框默认样式移除 在chrome浏览器中会默认给页面上的输入框如input、textarea等渲染浏览器自带的边框效果 IE8中效果如下&#xff1a; Chrome中效果如下&#xff1a; 这在我们未给输入框设置获取焦点时改变边框颜色时&#xff0c;chrome浏览器解析页面中默认将输入框…

MBR解析

先推广一下QQ群&#xff1a;61618925。欢迎各位爱好编程的朋友加入。 一、程序界面 二、关键部分代码&#xff1a; 1.数据结构定义 #define MBRSIZE 512 #define BOOTRECORDSIZE 440 #define DISKSIGNEDSIZE 4 #define RESERVESIZE 2 #define DPTNUMBER 4 #define DPTSIZE 16 #…

css sprite讲解与使用实例

转自&#xff1a;http://www.manongjc.com/article/886.html 一、什么是css sprites css sprites直译过来就是CSS精灵。通常被解释为“CSS图像拼合”或“CSS贴图定位”。其实就是通过将多个图片融合到一张图里面&#xff0c;然后通过CSS background背景定位技术技巧布局网页背景…

如何通过 HttpWebRequest 上传文件?

咨询区 dr. evil我不希望通过 WebDAV 文件夹的方式上传文件&#xff0c;我想通过相关的 HttpWebRequest 类&#xff0c;类库或者代码片段来帮我模拟浏览器行为来上传文件&#xff0c;请问是否有好的解决方案&#xff1f;回答区 Joshcodes如果你用的是基于 .NET 4.5 以上的版本&…

实验 2 关键字驱动测试(2 学时)实验报告--软件功能测试与性能测试实验

以下是实验要求部分&#xff1a;&#xff08;小伙伴们根据自己需求决定是否下载哈&#xff09; 下载位置链接&#xff1a;https://download.csdn.net/download/qq_44872173/20031354

小手工纸盒机器人_亲子手工 | DIY弹珠迷宫小黑手自制玩具系列

上周用鞋盒做的迷你桌球受到很多男孩子的喜欢今天小黑手又做了一个瓦楞纸手工「弹珠迷宫」也是喜欢的爱不释手呢暑假小黑手系列&#xff0c;希望也能攒出个自己的小游乐场自己动手做自己的玩具&#xff0c;买玩具的钱可以省了快速手工教程Let’s do it我们一起做起来吧&#xf…

linux网络编程之用select方法实现io复用(基于udp)

1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:   (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。   (2)当一个客户同时处理多个套接口时,而这种情况是可能…

Linux screen 常用命令

想必&#xff0c;只要接触过Linux一段时间的人&#xff0c;一定知道screen这个神奇的工具了&#xff0c;它主要有如下些优势&#xff1a; 1. 后台运行&#xff1a;当你在ssh terminal执行shell时&#xff0c;如果网络这时断开&#xff0c;你的程序会怎样&#xff1f;TERMINATED…

实验 3 检查点和参数化实验报告--软件功能测试与性能测试实验

实验报告下载链接&#xff1a; https://download.csdn.net/download/qq_44872173/20031539 实验要求部分&#xff1a;

SNS社区

SNS&#xff0c;全称Social Networking Services&#xff0c;即社会性网络服务&#xff0c;专指旨在帮助人们建立社会性网络的互联网应用服务。1967年&#xff0c;哈佛大学的心理学教授Stanley Milgram(1933&#xff5e;1984)创立了六度分割理论&#xff0c;简单地说&#xff1…