SpringMvc项目中使用GoogleKaptcha 生成验证码

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="提交验证" 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.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

时间: 2024-10-06 07:45:01

SpringMvc项目中使用GoogleKaptcha 生成验证码的相关文章

在springmvc项目中使用kaptcha生成验证码

Kaptcha验证码 下载kaptcha-2.3.2.jar http://code.google.com/p/kaptcha/downloads/list 1.spring 配置文件 applicationContext.xml [html]          <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">           <pro

项目记录:spring+springmvc 项目中 @Transactional 失效的解决方法

第一步,修改spring的配置文件和springmvc的配置文件 --------------------------------applicationContext.xml <context:annotation-config/>  <context:component-scan base-package="com.xxx"> <context:exclude-filter type="annotation" expression=&

SpringMVC项目中web.xml中的节点加载顺序问题

SpringMVC项目中web.xml中的节点加载顺序问题,之前以为web.xml中就是一些配置信息,和节点的顺序没有关系,后来才发现初始化时的加载顺序是和节点的顺序相关的. 完整的web.xml文件内容: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns=&quo

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

情况一: ajax中传值时是乱码(后台可以获取到中文字符,但用@ResponseBody返回时前台为乱码) 情况二: Controller 中 request.getParameter()获取到的是乱码 @RequestMapping(params = "method=submit") public String submit(HttpServletRequest request, ModelMap modelMap) throws Exception{ String uname =

Android Studio-Gradle项目中添加JNI生成文件(.so文件)

当使用gradle时,添加.so和jar包遇到报错: java.lang.UnsatisfiedLinkError: Couldn't load faceppapi: findLibrary returned null 解决办法是将build.gradle写成如下形式: apply plugin: 'android' android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersi

如何在SpringMVC项目中部署WebService服务并打包生成客户端

场景 某SpringMVC项目原本为一个HTTP的WEB服务项目,之后想在该项目中添加WebService支持,使该项目同时提供HTTP服务和WebService服务.其中WebService服务通过 /ws/** 地址拦截. 配置 通过配置让SpringMVC支持WebService. 依赖 首先通过Maven引入必要依赖包. org.apache.cxf org.apache.neethi com.ibm.wsdl4j org.apache.XmlSchema Web.xml 通过配置Web

Java Web项目中使用Freemarker生成Word文档

Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob.Apache POI.Java2Word.iText等各种方式,其实在从Office 2003开始,就可以将Office文档转换成XML文件,这样只要将需要填入的内容放上${}占位符,就可以使用像Freemarker这样的模板引擎将出现占位符的地方替换成真实数据,这种方式较之其他的方案要更为简单. 下面举一个简单的例子,比如在Web页面中填写个人简历,然后点击保存下载到本地,效果图如下所示. 打开下

Android项目中JNI技术生成并调用.so动态库实现详解

生成 jni方式有两种:一种是通过SWIG从C++代码生成过度的java代码:另一种是通过javah的方式从java代码自动生成过度的C++代码.两种方式下的步骤流程正好相反. 第一种方式:由于需要配置SWIG环境,有点麻烦了,所以往往大家不采用这个途径,参照博文http://my.oschina.net/liusicong/blog/314162. 第二种方式:javah的方式则通过shell指令就可以完成整个流程,该过程大概包括以下步骤: 编写 Java 代码.我们将从编写 Java 类开始

SpringMVC项目中获取所有URL到Controller Method的映射

Spring是一个很好很强大的开源框架,它就像是一个容器,为我们提供了各种Bean组件和服务.对于MVC这部分而言,它里面实现了从Url请求映射控制器方法的逻辑处理,在我们平时的开发工作中并不需要太多的理会这个Url是怎么和控制器中的方法建立映射的,一切都由Spring MVC帮我们搞定了. 但是我今天在做SDK工程的时候,突然产生一个想法:能否把我项目中的所有Url和Method的映射信息打印出来?以便我一眼就看出我已经完成了那些API接口开发,这些方法需要什么参数.就像下图所示: 有了想法就