前言: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的配置
<!-- google kaptcha的相关配置-->
<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
<property name="config">
<bean class="com.google.code.kaptcha.util.Config">
<constructor-arg>
<props>
<!-- 是否有边框 可选yes 或者 no -->
<prop key="kaptcha.border">yes</prop>
<!-- 边框颜色 -->
<prop key="kaptcha.border.color">105,179,90</prop>
<!-- 验证码文本字符颜色 -->
<prop key="kaptcha.textproducer.font.color">blue</prop>
<!-- 验证码文本字符大小 -->
<prop key="kaptcha.textproducer.font.size">45</prop>
<!-- 验证码图片的宽度 默认200 -->
<prop key="kaptcha.image.width">125</prop>
<!-- 验证码图片的高度 默认50 -->
<prop key="kaptcha.image.height">45</prop>
<!-- 验证码文本字符长度 默认为5 -->
<prop key="kaptcha.textproducer.char.length">4</prop>
<!-- 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize) -->
<prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>
</props>
</constructor-arg>
</bean>
</property>
</bean>
3、Controller的两个方法
package com.ccg.controller;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.PrintWriter;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
@Controller
@RequestMapping("captcha")
public class CaptchaController {
@Resource
private Producer captchaProducer;
/**
*
* 获取验证码图片
* @author ccg
* @param request
* @param response
* @return
* @throws IOException
* Created 2017年1月17日 下午5:07:28
*/
@RequestMapping("getCaptchaCode")
public ModelAndView getCaptchaCode(HttpServletRequest request, HttpServletResponse response) throws IOException{
HttpSession session = request.getSession();
response.setDateHeader("Expires", 0);
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
response.setContentType("image/jpeg");
//生成验证码文本
String capText = captchaProducer.createText();
session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
System.out.println("生成验证码文本===="+capText);
//利用生成的字符串构建图片
BufferedImage bi = captchaProducer.createImage(capText);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(bi, "jpg", out);
try {
out.flush();
} finally {
out.close();
}
return null;
}
/**
*
* 前端输入的验证码与生成的对比
* @author ccg
* @param request
* @param response
* @param captchaCode
* Created 2017年1月17日 下午5:34:23
*/
@RequestMapping("checkCaptchaCode")
public void checkCaptchaCode(HttpServletRequest request, HttpServletResponse response,@RequestParam("captchaCode") String captchaCode){
System.out.println("页面输入验证码===="+captchaCode);
response.setCharacterEncoding("UTF-8");
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
String generateCode =(String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
String result = "";
if(generateCode.equals(captchaCode)){
result = "验证成功";
}else{
result = "输入错误";
}
PrintWriter out = null;
try {
out = response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
out.print(result);
out.flush();
}
}
4、前台页面代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="${pageContext.request.contextPath}/js/jquery.min.js" type="text/javascript"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
生成的验证码:<img id="changeCaptcha" src="http://127.0.0.1/captcha/getCaptchaCode.htm"> <a href="javascript:changeCaptcha()" rel="external nofollow" >看不清,换一张</a>
<br>
<br>
请输入验证码:<input id="captchaCode" type="text"> <input type="button" value="提交验证" onclick="checkCaptcha()">
</body>
<script type="text/javascript">
//获取验证码图片
function changeCaptcha(){
$("#changeCaptcha").attr("src","http://127.0.0.1/captcha/getCaptchaCode.htm");
}
//验证输入的验证码
function checkCaptcha(){
var captchaCode = $("#captchaCode").val();
$.ajax({
type:'post',
async : false,
url:'http://127.0.0.1/captcha/checkCaptchaCode.htm',
data:{"captchaCode" : captchaCode},
success:function(res){
alert(res);
}
});
}
</script>
</html>
需要注意到引用了jquery.min.js
5、运行效果
附Google Captcha 可配置项
kaptcha.border 是否有边框 默认为true 我们可以自己设置yes,no
kaptcha.border.color 边框颜色 默认为Color.BLACK
kaptcha.border.thickness 边框粗细度 默认为1
kaptcha.producer.impl 验证码生成器 默认为DefaultKaptcha
kaptcha.textproducer.impl 验证码文本生成器 默认为DefaultTextCreator
kaptcha.textproducer.char.string 验证码文本字符内容范围 默认为abcde2345678gfynmnpwx
kaptcha.textproducer.char.length 验证码文本字符长度 默认为5
kaptcha.textproducer.font.names 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
kaptcha.textproducer.font.size 验证码文本字符大小 默认为40
kaptcha.textproducer.font.color 验证码文本字符颜色 默认为Color.BLACK
kaptcha.textproducer.char.space 验证码文本字符间距 默认为2
kaptcha.noise.impl 验证码噪点生成对象 默认为DefaultNoise
kaptcha.noise.color 验证码噪点颜色 默认为Color.BLACK
kaptcha.obscurificator.impl 验证码样式引擎 默认为WaterRipple
kaptcha.word.impl 验证码文本字符渲染 默认为DefaultWordRenderer
kaptcha.background.impl 验证码背景生成器 默认为DefaultBackground
kaptcha.background.clear.from 验证码背景颜色渐进 默认为Color.LIGHT_GRAY
kaptcha.background.clear.to 验证码背景颜色渐进 默认为Color.WHITE
kaptcha.image.width 验证码图片宽度 默认为200
kaptcha.image.height 验证码图片高度 默认为50
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# SpringMvc
# GoogleKaptcha
# 验证码
# Go生成base64图片验证码实例(超详细工具类)
# Google Kaptcha验证码生成的使用实例说明
# golang包快速生成base64验证码的方法
# 使用google.kaptcha来生成图片验证码的实现方法
# Django 生成登陆验证码代码分享
# Django验证码的生成与使用示例
# Go语言简易图像验证码生成的实战案例
# 默认为
# 噪点
# 下午
# 我在
# 我们可以
# 微软
# 下载速度
# 注意到
# 请输入
# 可选
# 还行
# 大家多多
# 宋体
# 应该是
# ImageIO
# servlet
# HttpServletRequest
# stereotype
相关文章:
如何在IIS中配置站点IP、端口及主机头?
如何通过山东自助建站平台快速注册域名?
黑客如何通过漏洞一步步攻陷网站服务器?
C++如何编写函数模板?(泛型编程入门)
建站之星安装提示数据库无法连接如何解决?
如何在景安云服务器上绑定域名并配置虚拟主机?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
上海网站制作开发公司,上海买房比较好的网站有哪些?
如何用PHP快速搭建CMS系统?
在线制作视频网站免费,都有哪些好的动漫网站?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
建站之星如何优化SEO以实现高效排名?
高防服务器租用指南:配置选择与快速部署攻略
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
广东企业建站网站优化与SEO营销核心策略指南
如何在Windows 2008云服务器安全搭建网站?
Thinkphp 中 distinct 的用法解析
实现点击下箭头变上箭头来回切换的两种方法【推荐】
如何在Golang中使用replace替换模块_指定本地或远程路径
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
智能起名网站制作软件有哪些,制作logo的软件?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
香港服务器选型指南:免备案配置与高效建站方案解析
制作销售网站教学视频,销售网站有哪些?
郑州企业网站制作公司,郑州招聘网站有哪些?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何快速搭建高效WAP手机网站吸引移动用户?
如何通过WDCP绑定主域名及创建子域名站点?
建站之星伪静态规则如何设置?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
建站主机空间推荐 高性价比配置与快速部署方案解析
移民网站制作流程,怎么看加拿大移民官网?
教程网站设计制作软件,怎么创建自己的一个网站?
中山网站制作网页,中山新生登记系统登记流程?
建站主机如何选?性能与价格怎样平衡?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
如何解决ASP生成WAP建站中文乱码问题?
香港网站服务器数量如何影响SEO优化效果?
建站之星安装需要哪些步骤及注意事项?
微信h5制作网站有哪些,免费微信H5页面制作工具?
网站制作员失业,怎样查看自己网站的注册者?
c# 服务器GC和工作站GC的区别和设置
如何高效利用亚马逊云主机搭建企业网站?
建站之星如何快速更换网站模板?
如何登录建站主机?访问步骤全解析
非常酷的网站设计制作软件,酷培ai教育官方网站?
,sp开头的版面叫什么?
*请认真填写需求信息,我们会在24小时内与您取得联系。