原文:http://www.kailing.pub/article/index/arcid/92.html

Kaptcha是什么?

kaptcha 是谷歌开源的非常实用的验证码生成工具,基于SimpleCaptcha的开源项目。使用Kaptcha 生成验证码十分简单并且参数可以进行自定义。只需添加jar包配置下就可以使用,通过配置,可以自己定义验证码大小、颜色、显示的字符等等。下面就来讲一下如何使用kaptcha生成验证码以及在服务器端取出验证码进行校验。

怎么使用Kaptcha?

1.首先要项目使用Kaptcha肯定要依赖kaptcha的jar,maven项目的话直接加入如下依赖,非maven项目就自己下载jar包吧

<dependency>
<groupId>com.github.axet</groupId>
<artifactId>kaptcha</artifactId>
<version>0.0.9</version>
</dependency>

官方下载链接:https://code.google.com/archive/p/kaptcha/downloads,当然你得翻墙哈

2.配置kaptcha

以项目使用spring为例,配置一个默认的Kaptcha的bean,如下

	<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha" scope="singleton">
<property name="config">
<bean class="com.google.code.kaptcha.util.Config">
<constructor-arg>
<props>
<prop key="kaptcha.session.key">kaptcha.code</prop>
<!-- 无边框 -->
<prop key="kaptcha.border">no</prop>
<prop key="kaptcha.textproducer.font.color">black</prop>
<!-- 渲染效果:水纹:WaterRipple;鱼眼:FishEyeGimpy;阴影:ShadowGimpy -->
<prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.WaterRipple</prop>
<!-- 不要噪点 -->
<prop key="kaptcha.noise.impl">com.google.code.kaptcha.impl.NoNoise</prop>
<prop key="kaptcha.image.width">90</prop>
<prop key="kaptcha.image.height">33</prop>
<prop key="kaptcha.textproducer.font.size">25</prop>
<prop key="kaptcha.textproducer.char.length">4</prop>
<prop key="kaptcha.textproducer.char.space">5</prop>
<!-- 和登录框背景颜色一致 -->
<prop key="kaptcha.background.clear.from">247,247,247</prop>
<prop key="kaptcha.background.clear.to">247,247,247</prop>
</props>
</constructor-arg>
</bean>
</property>
</bean>

3.将生成的验证码保存进session中,并输出由验证码生成的图片流到页面

        @Autowired
private Producer captchaProducer;
@RequestMapping(value = "/kaptchaImage", method = RequestMethod.GET)
public void kaptcha(HttpServletRequest req, HttpServletResponse rsp) {
ServletOutputStream out = null;
try {
HttpSession session = req.getSession();
rsp.setDateHeader("Expires", 0);
rsp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
rsp.addHeader("Cache-Control", "post-check=0, pre-check=0");
rsp.setHeader("Pragma", "no-cache");
rsp.setContentType("image/jpeg");
String capText = captchaProducer.createText();
session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
BufferedImage image = captchaProducer.createImage(capText);
out = rsp.getOutputStream();
ImageIO.write(image, "jpg", out);
out.flush();
}catch(IOException e)
{
throw new SystemException(e);
} finally {
try {
out.close();
} catch (IOException e) {
throw new SystemException(e);
}
}
}

4.校验用户输入的验证码和保存进session的是否一直,达到验证目的

@RequestMapping(value = "/login", method = RequestMethod.POST, produces = "text/html; charset=utf-8")
public String userLogin(String accountName, String password, String captcha, Boolean rememberMe, HttpServletRequest request) {
//从session中取出kaptcha生成的验证码text值
String expected = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);
//获取用户页面输入的验证码
if(!captcha.equalsIgnoreCase(expected))
{
request.setAttribute("error", "验证码错误!");
return "/login";
}else
{
xxxx验证码后的后续逻辑
}
}

更详细的Kaptcha验证码配置?

  • 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

效果图如下

Google Kaptcha验证码的使用的更多相关文章

  1. Spring MVC 中使用 Google kaptcha 验证码

    验证码是抵抗批量操作和恶意登录最有效的方式之一. 验证码从产生到现在已经衍生出了很多分支.方式.google kaptcha 是一个非常实用的验证码生成类库. 通过灵活的配置生成各种样式的验证码,并将 ...

  2. google kaptcha 验证码的使用

    这边演示下idea+maven+servlet实现谷歌的kaptcha验证码的使用: web.xml, 这边主要是kaptcha验证器, <!DOCTYPE web-app PUBLIC &qu ...

  3. google kaptcha 验证码组件使用简介

    kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.K ...

  4. Java实现验证码制作之一Kaptcha验证码

    Kaptcha验证码 是google提供的验证码插件,使用起来相对简单,设置的干扰线以及字体扭曲不易让其他人读取破解. 这里我们需要 导入一个 kaptcha-2.3.jar  下载地址:http:/ ...

  5. kaptcha验证码插件的使用

    kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.code.kaptcha.servlet.K ...

  6. kaptcha 验证码组件使用

    kaptcha 验证码组件使用简介   kaptcha 是一个非常实用的验证码生成工具.有了它,你可以生成各种样式的验证码,因为它是可配置的.kaptcha工作的原理是调用 com.google.co ...

  7. KAPTCHA验证码使用步骤

    使用kaptcha可以方便的配置: · 验证码的字体 · 验证码字体的大小 · 验证码字体的字体颜色 · 验证码内容的范围(数字,字母,中文汉字!) · 验证码图片的大小,边框,边框粗细,边框颜色 · ...

  8. kaptcha验证码的使用

    使用kaptcha可以方便的配置: 验证码的字体 验证码字体的大小 验证码字体的字体颜色 验证码内容的范围(数字,字母,中文汉字!) 验证码图片的大小,边框,边框粗细,边框颜色 验证码的干扰线(可以自 ...

  9. jcaptcha和kaptcha验证码使用入门【转】

    jcaptcha和kaptcha验证码使用入门 一.jcaptcha验证码使用 jcaptcha使用默认样式生成的验证码比较难以识别,所以需要自定义验证码的样式,包括,背景色.背景大小.字体.字体大小 ...

随机推荐

  1. 掌握Spark机器学习库-07-回归分析概述

    1)回归与分类算法的区别 回归的预测结果是连续的,分类的预测结果是离散的. 2)spark实现的回归算法有: 3)通过相关系数衡量线性关系的程度

  2. Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图的数据操作

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:视图实体类映射 下一篇:Farseer.net轻量级ORM开源 ...

  3. Java之抽象和封装

    ① 如何从现实世界中抽象出类?    根据软件开发需求: 发现类-->发现类的属性-->发现类的方法    ②   构造方法的作用和特点是什么?    作用:在创建对象时执行一些初始化操作 ...

  4. win7电脑桌面壁纸曝光过高影响图标怎么办?亲测实用解决方法

    现在用win7系统的人应该还是挺多的吧,虽然说windows家族已经升级到现在的win11了,相信大多数人家用的电脑系统还是win7吧,今天要讲的是一个壁纸曝光度过高的解决办法,虽然还不清楚为什么,但 ...

  5. 迅为IMX6UL开发板

    迅为iMX6UL开发板采用核心板加底板形式,核心板使用邮票孔方式连接,牢固耐用.处理器ARM®Cortex®-A7内核,运行速度高达528 MHz.512MDDR内存,8G EMMC存储,板截双网口, ...

  6. hibernate fetch属性

    fetch的属性值有:select(默认值).join.subselect 1)当fetch=”select”时,程序会先查询返回要查询的主体对象,然后根据lazy属性看是否懒加载. 2)当fetch ...

  7. ALTER DATABASE 修改一个数据库

    SYNOPSIS ALTER DATABASE name SET parameter { TO | = } { value | DEFAULT } ALTER DATABASE name RESET ...

  8. Flutter web环境变量搭建及开发

    使用flutter开发app已有三个月,有一些行为形成了惯性,在搭建flutter web环境变量时走了不少的坑,分享出来,免得其他小伙伴再走一遍. 首先flutter的版本要使用1.5及以上版本 d ...

  9. 用node写个简单的静态服务器

    直接上代码吧,我把它命名为 app.js, 只要在该文件所在目录下,控制台运行 node app.js 即可启动一个本地服务器了. /** * 服务器 * Author jervy * Date */ ...

  10. 题解 洛谷P4035/BZOJ1013【[JSOI2008]球形空间产生器】

    题目链接在这QvQ "你要求出这个n维球体的球心坐标",这使我想到的解方程...... 先假设n=2,这是一个二维平面.设圆心的坐标为\((x,y)\),有两个坐标\((a_1,b ...