本文专为不想一遍遍手写验证码代码的”懒猿“而生,只需要添加部分配置文件,拷贝一个控制层代码,就能在页面中方便使用。话不多说,进入主题:

一. Spring MVC 环境实现方式:

1.1 spring-mvc.xml

  1. <!--kaptcha登录验证码 -->
  2. <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
  3. <property name="config">
  4. <bean class="com.google.code.kaptcha.util.Config">
  5. <constructor-arg>
  6. <props>
  7. <prop key="kaptcha.border">no</prop>
  8. <prop key="kaptcha.border.color">105,179,90</prop>
  9. <prop key="kaptcha.textproducer.font.color">red</prop>
  10. <prop key="kaptcha.image.width">200</prop>
  11. <prop key="kaptcha.textproducer.font.size">48</prop>
  12. <prop key="kaptcha.image.height">48</prop>
  13. <prop key="kaptcha.session.key">code</prop>
  14. <prop key="kaptcha.textproducer.char.string">123456789</prop>
  15. <prop key="kaptcha.textproducer.char.length">4</prop>
  16. <prop key="kaptcha.textproducer.char.space">6</prop>
  17. <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>
  18. <prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.WaterRipple</prop>
  19. </props>
  20. </constructor-arg>
  21. </bean>
  22. </property>
  23. </bean>

1.2 Controller 实现

  1. package com.vopzoon.app.base.captcha;
  2. import java.awt.image.BufferedImage;
  3. import javax.imageio.ImageIO;
  4. import javax.servlet.ServletOutputStream;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import javax.servlet.http.HttpSession;
  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. import com.google.code.kaptcha.Constants;
  13. import com.google.code.kaptcha.Producer;
  14. /**
  15. * 防止Captcha机器人登陆
  16. * @author liuwang
  17. *
  18. */
  19. @Controller
  20. @RequestMapping("/kaptcha/*")
  21. public class CaptchaController {
  22. @Autowired
  23. private Producer captchaProducer = null;
  24. @RequestMapping
  25. public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
  26. HttpSession session = request.getSession();
  27. String code = (String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
  28. System.out.println("******************验证码是: " + code + "******************");
  29. response.setDateHeader("Expires", 0);
  30. // Set standard HTTP/1.1 no-cache headers.
  31. response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
  32. // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
  33. response.addHeader("Cache-Control", "post-check=0, pre-check=0");
  34. // Set standard HTTP/1.0 no-cache header.
  35. response.setHeader("Pragma", "no-cache");
  36. // return a jpeg
  37. response.setContentType("image/jpeg");
  38. // create the text for the image
  39. String capText = captchaProducer.createText();
  40. // store the text in the session
  41. session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
  42. // create the image with the text
  43. BufferedImage bi = captchaProducer.createImage(capText);
  44. ServletOutputStream out = response.getOutputStream();
  45. // write the data out
  46. ImageIO.write(bi, "jpg", out);
  47. try {
  48. out.flush();
  49. } finally {
  50. out.close();
  51. }
  52. return null;
  53. }
  54. }

3. JSP 代码

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <script type="text/javascript" src="js/jquery.js"></script>
  8. <script type="text/javascript" src="js/functions.js"></script>
  9. <title>测试页面</title>
  10. <script type="text/javascript">
  11. $(function(){
  12. $('#kaptchaImage').click(function () {//生成验证码
  13. $(this).hide().attr('src', './kaptcha/getKaptchaImage.do?' + Math.floor(Math.random()*100) ).fadeIn();
  14. event.cancelBubble=true;
  15. });
  16. });
  17. window.onbeforeunload = function(){
  18. //关闭窗口时自动退出
  19. if(event.clientX>360&&event.clientY<0||event.altKey){
  20. alert(parent.document.location);
  21. }
  22. };
  23. function changeCode() {
  24. $('#kaptchaImage').hide().attr('src', './kaptcha/getKaptchaImage.do?' + Math.floor(Math.random()*100) ).fadeIn();
  25. event.cancelBubble=true;
  26. }
  27. </script>
  28. </head>
  29. <body>
  30. <div class="chknumber">
  31. <label>验证码:
  32. <input name="kaptcha" type="text" id="kaptcha" maxlength="4" class="chknumber_input" />
  33. </label>
  34. <br />
  35. <img src="./kaptcha/getKaptchaImage.do" id="kaptchaImage"  style="margin-bottom: -3px"/>
  36. <a href="#" onclick="changeCode()">看不清?换一张</a>
  37. </div>
  38. </body>
  39. </html>

PS:需要自行引入kaptcha.jar;

二:servlet实现方式

2.1 web.xml 配置:

    1. <!--Kaptcha 验证码  -->
    2. <servlet>
    3. <!-- 生成验证码和刷新的Servlet -->
    4. <servlet-name>kaptcha</servlet-name>
    5. <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
    6. <init-param>
    7. <!-- 验证码图片的边框 yes和no -->
    8. <param-name>kaptcha.border</param-name>
    9. <param-value>yes</param-value>
    10. </init-param>
    11. <init-param>
    12. <!-- 验证码图片的边框的颜色 -->
    13. <param-name>kaptcha.border.color</param-name>
    14. <param-value>105,179,90</param-value>
    15. </init-param>
    16. <init-param>
    17. <!-- 验证码的颜色 -->
    18. <param-name>kaptcha.textproducer.font.color</param-name>
    19. <param-value>red</param-value>
    20. </init-param>
    21. <init-param>
    22. <!-- 整个验证码在图片中的宽度 -->
    23. <param-name>kaptcha.image.width</param-name>
    24. <param-value>250</param-value>
    25. </init-param>
    26. <init-param>
    27. <!-- 整个验证码在图片中的高度 -->
    28. <param-name>kaptcha.image.height</param-name>
    29. <param-value>90</param-value>
    30. </init-param>
    31. <init-param>
    32. <!-- 验证码在图片中的大小 -->
    33. <param-name>kaptcha.textproducer.font.size</param-name>
    34. <param-value>70</param-value>
    35. </init-param>
    36. <init-param>
    37. <!-- 获取验证码的名字SESSION -->
    38. <param-name>kaptcha.session.key</param-name>
    39. <param-value>code</param-value>
    40. </init-param>
    41. <init-param>
    42. <!-- 显示几个验证码 -->
    43. <param-name>kaptcha.textproducer.char.length</param-name>
    44. <param-value>4</param-value>
    45. </init-param>
    46. <init-param>
    47. <!-- 验证码的字体和式样 -->
    48. <param-name>kaptcha.textproducer.font.names</param-name>
    49. <param-value>宋体,楷体,微软雅黑</param-value>
    50. </init-param>
    51. </servlet>
    52. <servlet-mapping>
    53. <servlet-name>kaptcha</servlet-name>
    54. <url-pattern>/kaptcha/kaptcha.jpg</url-pattern>
    55. </servlet-mapping>

Spring MVC Captcha 验证码的更多相关文章

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

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

  2. spring mvc生成注册验证码

    通过Spring MVC为系统添加验证码 1:布局登陆页面,用户名,密码,填写验证码的文本框,及验证码的图片及点击换图 <%@ taglib prefix="c" uri=& ...

  3. Spring mvc 中使用 kaptcha 验证码

    生成验证码的方式有很多,个人认为较为灵活方便的是Kaptcha ,他是基于SimpleCaptcha的开源项目.使用Kaptcha 生成验证码十分简单并且参数可以进行自定义.只需添加jar包配置下就可 ...

  4. 基于spring mvc的图片验证码实现

    本文实现基于spring mvc的图片验证码,分后台代码和前端页面的展现以及验证码的验证. 首看后台实现代码: @RequestMapping({"authCode"}) publ ...

  5. Spring MVC 使用kaptcha生成验证码

    Spring MVC 使用kaptcha生成验证码 1.下载kaptcha-2.3.2.jar(或直接通过该文章附件下载) http://code.google.com/p/kaptcha/downl ...

  6. spring mvc 4.3.2 + mybatis 3.4.1 + mysql 5.7.14 +shiro 幼儿园收费系统 之 登录

    如标题,用spring mvc 4.3.2+mybatis 3.4.1 + mysql 5.7.14 +shiro 开发了一个用于幼儿园的管理系统. 功能模块 包括 账号,角色,权限管理. 幼儿档案管 ...

  7. Spring MVC+Spring +Hibernate配置事务,但是事务不起作用

    最近做项目,被一个问题烦恼了很久.使用Spring MVC+Spring +Hibernate开发项目,在使用注解配置事务管理,刚开始发现无论如何数据库都无法更新,但是可以从数据库查询到数据.怀疑是配 ...

  8. Spring Mvc和Mybatis的多数据库访问配置过程

    Spring Mvc 加Mybatis的多数据库访问源配置访问过程如下: 在applicationContext.xml进行配置 <?xml version="1.0" en ...

  9. 基于Spring MVC 实现拦截器

    Spring MVC 拦截器 一,具体内容: 在所有的开发之中拦截器属于一个重要的组件,可以说几乎所有的项目都会提供的概念应用,不管是Spring MVC,还是Struts 2.x都是提供有拦截器的, ...

随机推荐

  1. 简述Vue项目中返回上一页

    1.背景 由于Vue所生成的项目叫做单页应用,即SPA,如果还是使用jQuery中的go(-)或back()是行不通的,所以,我们使用到了Vue中的编程式导航. 2.基本使用 定义返回按钮: < ...

  2. 更新代码 出现 You need to upgrade the working copy first 错误

    今天更新了Eclipse的subclipse插件,更新代码报如下错误: svn: The working copy at 'E:\591woospace\kst_fashion_alipay_v1.2 ...

  3. Scrapy输出文件格式问题汇总

    Q:Scrapy抓取的内容(包含中文)输出到JSON Lines文件时如何确保输出的是字符本身而不是其unicode编码? A:默认的JsonLinesItemExporter其ensure_asci ...

  4. Java第二周总结

    一.Java 基础程序设计 第一章: (1)在Java中源文件的扩展名为.java,编译Java源程序文件产生相应的字节码文件扩展名为.class (2)public class定义要求类名称保持一致 ...

  5. Python win32com模块 合并文件夹内多个docx文件为一个docx

    Python win32com模块 合并文件夹内多个docx文件为一个docx #!/usr/bin/env python # -*- coding: utf-8 -*- from win32com. ...

  6. 2019 Multi-University Training Contest 2 - 1011 - Keen On Everything But Triangle - 线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=6601 首先要贪心地想,题目要最长的边长,那么要怎么构造呢?在一段连续的区间里面,一定是拿出最长的三根出来比,这样 ...

  7. 四:JVM调优原理与常见异常处理方案

    在jvm调优之前,我们必须先了解jvm的内存模型与GC回收机制,这些在我前面的文章里面有介绍!接下来我们通过一个案例来调整jvm性能. 一测试案例: 1.1 编写demo import java.te ...

  8. [七月挑选]使用hexo建立主题,并发布到github

    title: 使用hexo建立主题,并发布到github 根据hexo官网的概述和hexo官网的建站,搭建最开始的hexo博客. 1.环境预先安装好node.js和git 2.npm安装hexo: $ ...

  9. OC中数组排序的3种方法

    总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 大体上 ...

  10. 搭建jumperserver堡垒机管理万台服务器-1

    搭建jumperserver堡垒机管理万台服务器-1 1  Jumpserver堡垒机概述-部署Jumpserver运行环境 2  安装Coco组件 3  安装Web-Terminal前端-Luna组 ...