1. package main.com.smart.controller;
  2.  
  3. import com.google.code.kaptcha.Producer;
  4. import main.com.smart.utils.CaptchaProducer;
  5. import main.com.smart.utils.RedisClient;
  6. import org.apache.log4j.Logger;
  7. import org.apache.log4j.spi.LoggerFactory;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Controller;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.servlet.ModelAndView;
  12.  
  13. import javax.imageio.ImageIO;
  14. import javax.servlet.ServletOutputStream;
  15. import javax.servlet.http.HttpServletRequest;
  16. import javax.servlet.http.HttpServletResponse;
  17. import javax.servlet.http.HttpSession;
  18.  
  19. import com.google.code.kaptcha.Constants;
  20.  
  21. import java.awt.image.BufferedImage;
  22.  
  23. /**
  24. * 验证码 生成控制器
  25. *
  26. * @author yang ming
  27. * @create 2016-04-29 12:17
  28. */
  29.  
  30. @Controller
  31. @RequestMapping("/kaptcha")
  32. public class CaptchaController {
  33. /**
  34. * 使用方法
  35. * get: http://localhost:8080/smart/kaptcha
  36. */
  37. private static final Logger log = Logger.getLogger(CaptchaController.class);
  38. @Autowired
  39. private Producer captchaProducer = null;
  40.  
  41. @RequestMapping
  42. public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
  43. RedisClient client = RedisClient.getInstance();
  44. //在控制器中获取验证码
  45. //String kaptchaExpected = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
  46. log.info("获取验证");
  47.  
  48. log.info(Constants.KAPTCHA_SESSION_KEY);
  49. HttpSession session = request.getSession();
  50. String code1 = client.getValue(Constants.KAPTCHA_SESSION_KEY);
  51. String code = String.valueOf(session.getAttribute(Constants.KAPTCHA_SESSION_KEY));
  52. //System.out.println("******************验证码是: " + code + "******************");
  53.  
  54. response.setDateHeader("Expires", 0);
  55.  
  56. // Set standard HTTP/1.1 no-cache headers.
  57. response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
  58.  
  59. // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
  60. response.addHeader("Cache-Control", "post-check=0, pre-check=0");
  61.  
  62. // Set standard HTTP/1.0 no-cache header.
  63. response.setHeader("Pragma", "no-cache");
  64.  
  65. // return a jpeg
  66. response.setContentType("image/jpeg");
  67.  
  68. // create the text for the image
  69. String[] array = CaptchaProducer.getCaptchaText();
  70. //String capText = captchaProducer.createText();
  71. //int param1 = (int)capText.charAt(0);
  72. //int param2 = (int)capText.charAt(1);
  73. Integer result = Integer.valueOf(array[0]) + Integer.valueOf(array[1]);
  74.  
  75. // store the text in the session
  76. client.setValue(Constants.KAPTCHA_SESSION_KEY, result.toString());
  77. //session.setAttribute(Constants.KAPTCHA_SESSION_KEY, result);
  78.  
  79. // create the image with the text
  80. BufferedImage bi = captchaProducer.createImage(array[0]+"+"+array[1]+"=?");
  81. ServletOutputStream out = response.getOutputStream();
  82.  
  83. // write the data out
  84. ImageIO.write(bi, "jpg", out);
  85. try {
  86. out.flush();
  87. } finally {
  88. out.close();
  89. }
  90. return null;
  91. }
  92.  
  93. }

利用谷歌 kaptcha 进行验证码生成的更多相关文章

  1. 关于表单重复提交之验证码 和谷歌Kaptcha图片验证码的使用

    表单重复提交之-----验证码 表单重复提交有三种常见的情况: 一:提交完表单.服务器使用请求转来进行页面跳转.这个时候,用户按下功能键 F5,就会发起最后一次的请求. 造成表单重复提交问题.解决方法 ...

  2. 【技术分享】ReBreakCaptcha:利用谷歌来破解谷歌的验证码

    概述 从2016年开始,我就在琢磨寻找一种新的绕过谷歌验证码v2的方法会有多难,如果这种方法能够适用于任何环境而不仅仅是针对特定的案例,那这种方法将是非常理想的.接下来我将向你介绍ReBreakCap ...

  3. (五)SpringMVC之使用Kaptcha实现验证码功能

    一.什么是Kaptcha Kaptcha是Google开发的用于自动生成验证码的插件. 二.怎么导入Kaptcha ① 如果没有用Maven管理工具的话就直接导入包(可以直接下载:pau8) http ...

  4. php 图片验证码生成 前后台验证

    自己从前一段时间做了个php小项目,关于生成图片验证码生成和后台的验证,把自己用到的东西总结一下,希望大家在用到相关问题的时候可以有一定的参考性. 首先,php验证码生成. 代码如下: 1.生成图像代 ...

  5. ASP.NET验证码生成与识别

    一般验证码页面只输出一个图片而不进行其他业务处理,所以验证码一般放在一般处理程序(httpHandler)页面中,而如果将验证码生成代码放到一般处理程序中,要将生成验证码保存在Session中,这里我 ...

  6. ajax原理,验证码生成原理

    什么是ajax AJAX:”Asynchronous JavaScript and XML” 中文意思:异步JavaScript和XML 指一种创建交互式网页应用的网页开发技术.   不是指一种单一的 ...

  7. 利用onekeyup即可实现验证码的点击刷新功能

    显示验证码 首先在Home/Controller下创建一个公共控制器PublicController 1 <php2 namespace Home\Controller;3 4 use Thin ...

  8. [转]php 图片验证码生成 前后台验证

    本文转自:https://www.cnblogs.com/xiaoyezi/p/3541195.html 自己从前一段时间做了个php小项目,关于生成图片验证码生成和后台的验证,把自己用到的东西总结一 ...

  9. web页面 验证码 生成

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

随机推荐

  1. 转:Thumbs.db是什么文件?是病毒吗?怎么处理?

    今天有朋友兴冲冲的问我,Thumbs.db是什么文件?是病毒吗?会不会对电脑产生危害. 很多朋友对Thumbs.db这个文件不了解,会以为是病毒,实际上并非如此.那么,Thumbs.db是什么文件?有 ...

  2. fpdf使用標楷體

    <? require('chinese-unicode.php'); $pdf=new PDF_Unicode(); $pdf->Open(); $pdf->AddPage(); $ ...

  3. HttpURLConnection和HttpClient

    HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.在 JDK 的 java.net 包中已经提供了访问 ...

  4. Yarn应用程序运行流程剖析

    Yarn(Yet Another Resource Negotiator)是一个Hadoop集群资源管理系统,Hadoop2时被引入,旨在提高MapReduce的性能,但YARN已足够通用,使得它可以 ...

  5. visual studio 调试grunt

    原文地址: https://yoavniran.wordpress.com/2015/06/25/debug-grunt-tasks-in-visual-studio-2015/

  6. [Java] List / ArrayList - 源代码学习笔记

    在阅读 List / ArrayList 源代码过程中,做了下面的笔记. LinkedList 的笔记较多,放到了另一篇博文 LinkedList / Queue- 源代码学习笔记 List List ...

  7. [LeetCode] 347. Top K Frequent Elements 解题思路 - Java

    Given a non-empty array of integers, return the k most frequent elements. For example,Given [1,1,1,2 ...

  8. Java中List转换为数组,数组转List

    今天写代码遇到一个奇怪的问题,具体代码不贴出了,写一个简化的版本.如下: ArrayList<String> list=new ArrayList<String>();     ...

  9. python小技巧

    有的时候用一个全新的模块,对其属性和方法,用法并不太了解 这时你可以这样做: 1.dir([name]),如dir(int),会显示int的所有属性和方法

  10. Spring MVC url提交参数和获取参数

    [转载:http://blog.csdn.net/mahoking] 普通URL提交参数         该格式url为:url.do?param1=mahc&param2=8888.00 需 ...