原文: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. R Programming week 3-Debugging

    Something’s Wrong! Indications that something’s not right message: A generic notification/diagnostic ...

  2. 【C++】模板简述(五):类型萃取

    功能 类型萃取,在STL中用到的比较多,用于判断一个变量是否为POD类型. 简述来说可以用来判断出某个变量是内置类型还是自定义类型. 通过类型萃取,萃取到变量类型,对不同变量进行不同处理,可以提升程序 ...

  3. 【ARM开发板】迅为IMX6开发板QT下LVDS和HDMI双屏异显

    本文转自迅为论坛:http://www.topeetboard.com 平台:迅为-IMX6开发板 首先开发板分别连接9.7寸屏和HDMI显示器,然后使用MfgTool工具烧写QT系统,然后拨码开关设 ...

  4. CAD参数绘制椭圆(com接口)

    在CAD设计时,需要绘制椭圆,用户可以设置椭圆的基本属性. 主要用到函数说明: _DMxDrawX::DrawEllipse 绘制椭圆.详细说明如下: 参数 说明 DOUBLE dCenterX 椭圆 ...

  5. 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度

    开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...

  6. redis新特性

    摘自<redis 4.xcookbook> 从实例重启同步] 故障切换同步] 4.0之前从实例主键过期bug redis4新特性 Memory Command Lazy Free PSYN ...

  7. 诊断:RHEL7安装11.2RAC时root.sh错误ohasd failed to start

    RHEL 7.5中安装11gRAC时,在grid infrastructure的root.sh执行时,报错: # /oracle/product/11g/grid/root.sh ... Adding ...

  8. JS中的同步异步问题

    <script> /* * JS 是单线程 * 同步 异步 * 常见的异步 * 1.定时器 * 2.事件绑定 * 3.ajax请求(一般的都是异步) * 4.回调函数也可以理解成 异步 * ...

  9. BZOJ2007 NOI2010 海拔 平面图转对偶图 最小割

    题面太长啦,请诸位自行品尝—>海拔 分析: 这是我见过算法比较明显的最小割题目了,很明显对于某一条简单路径,海拔只会有一次变换. 而且我们要最终使变换海拔的边权值和最小. 我们发现变换海拔相当于 ...

  10. 反连接NOT EXISTS子查询中有or 谓词连接条件SQL优化一例

    背景 今天在日常数据库检查中,发现一SQL运行时间特别长,于是抓取出来,进行优化. 优化前: 耗时:503s 返回:0 SQL代码 SELECT * FROM MM_PAYABLEMONEY_TD P ...