原文: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,如下

  1. <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha" scope="singleton">
  2. <property name="config">
  3. <bean class="com.google.code.kaptcha.util.Config">
  4. <constructor-arg>
  5. <props>
  6. <prop key="kaptcha.session.key">kaptcha.code</prop>
  7. <!-- 无边框 -->
  8. <prop key="kaptcha.border">no</prop>
  9. <prop key="kaptcha.textproducer.font.color">black</prop>
  10. <!-- 渲染效果:水纹:WaterRipple;鱼眼:FishEyeGimpy;阴影:ShadowGimpy -->
  11. <prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.WaterRipple</prop>
  12. <!-- 不要噪点 -->
  13. <prop key="kaptcha.noise.impl">com.google.code.kaptcha.impl.NoNoise</prop>
  14. <prop key="kaptcha.image.width">90</prop>
  15. <prop key="kaptcha.image.height">33</prop>
  16. <prop key="kaptcha.textproducer.font.size">25</prop>
  17. <prop key="kaptcha.textproducer.char.length">4</prop>
  18. <prop key="kaptcha.textproducer.char.space">5</prop>
  19. <!-- 和登录框背景颜色一致 -->
  20. <prop key="kaptcha.background.clear.from">247,247,247</prop>
  21. <prop key="kaptcha.background.clear.to">247,247,247</prop>
  22. </props>
  23. </constructor-arg>
  24. </bean>
  25. </property>
  26. </bean>

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

  1. @Autowired
  2. private Producer captchaProducer;
  3. @RequestMapping(value = "/kaptchaImage", method = RequestMethod.GET)
  4. public void kaptcha(HttpServletRequest req, HttpServletResponse rsp) {
  5. ServletOutputStream out = null;
  6. try {
  7. HttpSession session = req.getSession();
  8. rsp.setDateHeader("Expires", 0);
  9. rsp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
  10. rsp.addHeader("Cache-Control", "post-check=0, pre-check=0");
  11. rsp.setHeader("Pragma", "no-cache");
  12. rsp.setContentType("image/jpeg");
  13. String capText = captchaProducer.createText();
  14. session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
  15. BufferedImage image = captchaProducer.createImage(capText);
  16. out = rsp.getOutputStream();
  17. ImageIO.write(image, "jpg", out);
  18. out.flush();
  19. }catch(IOException e)
  20. {
  21. throw new SystemException(e);
  22. } finally {
  23. try {
  24. out.close();
  25. } catch (IOException e) {
  26. throw new SystemException(e);
  27. }
  28. }
  29. }

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

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

更详细的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. Java Threads - The volatile keyword

    在网上看到很多关于 volatile 关键字的说明和使用问题, 今天引用Java Threads中的解释,感觉全面而详细,可惜是英文的. 这里很清晰的揭示了volatile 本身并不处理java读取数 ...

  2. 遮罩 HUD 指示器 蒙板 弹窗

    遮罩 HUD 指示器 蒙板 弹窗 UIAlertView的使用<代理方法处理按钮点击> UIAlertView *alertView = [[UIAlertView alloc] init ...

  3. Win7 32位 遇到微软 silverlight 5.0安装失败的解决办法

    刚开始,也是尝试下载安装,多次都是到99%,提示安装失败! 也查找了很多网上朋友分享的办法,还是不行.重新建立一个管理员账号,还是不行. 后来反复不断的测试,找到原因了,安装99%不成功,但是卸载程序 ...

  4. leetcode_951. Flip Equivalent Binary Trees_二叉树遍历

    https://leetcode.com/problems/flip-equivalent-binary-trees/ 判断两棵二叉树是否等价:若两棵二叉树可以通过任意次的交换任意节点的左右子树变为相 ...

  5. Python3.0 操作MySQL数据库执行SQL语句

    py3不支持MySQLdb,需要导入pymysql模块 # coding: utf-8 # Team : Quality Management Center # Author:Carson # Dat ...

  6. java组件不存在解决方案:右侧Maven Projects展开后左上角第一个刷新按钮 刷新后就会从新加载所有java的依赖项了

    java组件不存在解决方案:右侧Maven Projects展开后左上角第一个刷新按钮 刷新后就会从新加载所有java的依赖项了 软件:idea 问题产生:其他同事进行开发,引入新java组件后提交 ...

  7. 【JavaScript从入门到精通】第二课

    第二课 初探JavaScript魅力-02 变量 说起变量,我们不得不提起我们有一部比较古老的电视剧叫<包青天>.包青天有一把非常厉害的宝剑叫“尚方宝剑”,见到尚方宝剑有如见到皇帝.某种程 ...

  8. sqlserver 创建索引 物化 视图

    索引视图: create view  Test WITH SCHEMABINDING as select Id, Name from [dbo].[InterfaceCallSetting]creat ...

  9. getDate() 获取时间 如2018年09月21日 11:32:11

    function p(s) { return s < 10 ? '0' + s: s;} function getDate() { var myDate = new Date(); //获取当前 ...

  10. 零基础入门学习Python(19)--函数:我的地盘听我的

    知识点 函数与过程 在许多编程语言中,函数(function)是有返回值的,过程(procedure)是简单.特殊并且没有返回值的.而在Python中,严格来说只有函数没有过程. 例如: >&g ...