jsp spring mvc 框架集成google kaptcha生成验证码实例教程

关于kaptcha介绍,我们就不说了,网上一堆的资料。

使用kaptcha可以方便的配置:
    验证码的字体
    验证码字体的大小
    验证码字体的字体颜色
    验证码内容的范围(数字,字母,中文汉字!)
    验证码图片的大小,边框,边框粗细,边框颜色
    验证码的干扰线(可以自己继承com.google.code.kaptcha.NoiseProducer写一个自定义的干扰线)
    验证码的样式(鱼眼样式、3D、普通模糊……当然也可以继承com.google.code.kaptcha.GimpyEngine自定义样式)

下面介绍一下用法:

1.首先去官网下载jar:http://code.google.com/p/kaptcha/
2.建立一个web项目,导入 kaptcha-2.3.jar 到环境变量中。
网盘下载jar包: http://yunpan.cn/cdjzkrjKgQ7eD  访问密码 754f

(1)在applicationContext.xml中配置

<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
    <property name="config">
        <bean class="com.google.code.kaptcha.util.Config">
            <constructor-arg>
                <props>
                    <prop key="kaptcha.border">no</prop>
                    <prop key="kaptcha.border.color">105,179,90</prop>
                    <prop key="kaptcha.textproducer.font.color">red</prop>
                    <prop key="kaptcha.image.width">250</prop>
                    <prop key="kaptcha.textproducer.font.size">90</prop>
                    <prop key="kaptcha.image.height">90</prop>
                    <prop key="kaptcha.session.key">code</prop>
                    <prop key="kaptcha.textproducer.char.length">4</prop>
                    <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>
                </props>
            </constructor-arg>
        </bean>
    </property>
</bean>

(2)controller 的实现

package com.souvc.app.base.captcha;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
/**
 * 防止Captcha机器人登陆
 * @author liuwang
 *
 */
@Controller
@RequestMapping("/kaptcha/*")
public class CaptchaController {
    
    @Autowired
    private Producer captchaProducer = null;
    @RequestMapping
    public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
        HttpSession session = request.getSession();
        String code = (String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
        System.out.println("******************验证码是: " + code + "******************");
        
        response.setDateHeader("Expires", 0);
        
        // Set standard HTTP/1.1 no-cache headers.
        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
        
        // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
        response.addHeader("Cache-Control", "post-check=0, pre-check=0");
        
        // Set standard HTTP/1.0 no-cache header.
        response.setHeader("Pragma", "no-cache");
        
        // return a jpeg
        response.setContentType("image/jpeg");
        
        // create the text for the image
        String capText = captchaProducer.createText();
        
        // store the text in the session
        session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
        
        // create the image with the text
        BufferedImage bi = captchaProducer.createImage(capText);
        ServletOutputStream out = response.getOutputStream();
        
        // write the data out
        ImageIO.write(bi, "jpg", out);
        try {
            out.flush();
        } finally {
            out.close();
        }
        return null;
    }
}

(3)jsp代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/functions.js"></script>
<title>测试页面</title>
<script type="text/javascript">
$(function(){       
    $('#kaptchaImage').click(function () {//生成验证码
        $(this).hide().attr('src', './kaptcha/getKaptchaImage.do?' + Math.floor(Math.random()*100) ).fadeIn();
        event.cancelBubble=true;
    });
}); 
window.onbeforeunload = function(){
    //关闭窗口时自动退出
    if(event.clientX>360&&event.clientY<0||event.altKey){   
        alert(parent.document.location);
    }
};
function changeCode() {
    $('#kaptchaImage').hide().attr('src', './kaptcha/getKaptchaImage.do?' + Math.floor(Math.random()*100) ).fadeIn();
    event.cancelBubble=true;
}
</script>
</head>
<body>
        
<div class="chknumber">
      <label>验证码:
      <input name="kaptcha" type="text" id="kaptcha" maxlength="4" class="chknumber_input" />             
      </label>
      <br />
      <img src="./kaptcha/getKaptchaImage.do" id="kaptchaImage"  style="margin-bottom: -3px"/>
      <a href="#" onclick="changeCode()">看不清?换一张</a>
</div>
</body>
</html>

温馨提示:

获取验证码的关键语句,如下:

String code =(String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);

(4) 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

(5)验证验证码是否正确的方法:

@RequestMapping(value = "/checkRandCode", method = RequestMethod.GET)
public void checkRandCode(HttpServletRequest request,
        HttpServletResponse response) {
    Map<String, Object> map = new HashMap<String, Object>();
    try {
        String randCode = request.getParameter("randCode");
        logger.info("randCode: " +randCode);
        String status = "0";
        String code = (String)request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
        if(randCode.toLowerCase().equals(code.toLowerCase()))status="1";
        map.put("status", status);
        map.put("description", "");
        String data = JSONObject.fromObject(map).toString();
        logger.info("返回给页面的数据为: " + data);
        response.getWriter().print(data);
        response.getWriter().flush();
        response.getWriter().close();
    } catch (Exception ex) {
        logger.error(ex.getMessage(), ex);
    }

 
(6) 默认值


 
 
 
另一篇实用的 kaptcha 验证码在spring mvc 中的使用 教程
 
配置web.xml文件

<!--Kaptcha 验证码  --><!--  
    <servlet>  
        <servlet-name>kaptcha</servlet-name>  
        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>  
        <init-param>  
            <param-name>kaptcha.border</param-name>  
            <param-value>no</param-value>  
        </init-param>  
        <init-param>  
            <param-name>kaptcha.border.color</param-name>  
            <param-value>105,179,90</param-value>  
        </init-param>       
        <init-param>  
            <param-name>kaptcha.textproducer.font.color</param-name>  
            <param-value>red</param-value>  
        </init-param>  
        <init-param>  
            <param-name>kaptcha.image.width</param-name>  
            <param-value>250</param-value>  
        </init-param>  
        <init-param>  
            <param-name>kaptcha.image.height</param-name>  
            <param-value>90</param-value>  
        </init-param>  
        <init-param>  
            <param-name>kaptcha.textproducer.font.size</param-name>  
            <param-value>70</param-value>  
        </init-param>  
        <init-param>  
            <param-name>kaptcha.session.key</param-name>  
            <param-value>code</param-value>  
        </init-param>  
        <init-param>  
            <param-name>kaptcha.textproducer.char.length</param-name>  
            <param-value>4</param-value>  
        </init-param>  
        <init-param>  
            <param-name>kaptcha.textproducer.font.names</param-name>  
            <param-value>宋体,楷体,微软雅黑</param-value>  
        </init-param>       
    </servlet>

Xml代码

<servlet-mapping>  
    <servlet-name>kaptcha</servlet-name>  
    <url-pattern>/ClinicCountManager/kaptcha.jpg</url-pattern>  
</servlet-mapping>

jsp 页面使用

<table>  
        <tr>  
            <td><img src="/ClinicCountManager/kaptcha.jpg"></td>  
            <td valign="top">  
          
                <form method="POST">  
                    <br>sec code:<input type="text" name="kaptchafield"><br />  
                    <input type="submit" name="submit">  
                </form>  
            </td>  
        </tr>  
    </table>    
  
    <br /><br /><br /><br />  
      
    <%  
        String c = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);  
        String parm = (String) request.getParameter("kaptchafield");  
          
        out.println("Parameter: " + parm + " ? Session Key: " + c + " : ");  
          
        if (c != null && parm != null) {  
            if (c.equals(parm)) {  
                out.println("<b>true</b>");  
            } else {  
                out.println("<b>false</b>");  
            }  
          
    %>

 
上面的配置在普通jsp环境下面是有效的,如果在spring mvc环境下,则取不到session值,对于sping mvc环境验证码配置如下:

不用在web.xml进行相关配置,在applicationContext.xml中配置

<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">  
        <property name="config">  
            <bean class="com.google.code.kaptcha.util.Config">  
                <constructor-arg>  
                    <props>  
                        <prop key="kaptcha.border">no</prop>  
                        <prop key="kaptcha.border.color">105,179,90</prop>  
                        <prop key="kaptcha.textproducer.font.color">red</prop>  
                        <prop key="kaptcha.image.width">250</prop>  
                        <prop key="kaptcha.textproducer.font.size">90</prop>  
                        <prop key="kaptcha.image.height">90</prop>  
                        <prop key="kaptcha.session.key">code</prop>  
                        <prop key="kaptcha.textproducer.char.length">4</prop>  
                        <prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>  
                    </props>  
                </constructor-arg>  
            </bean>  
        </property>  
    </bean>

新建生成图片控制类

import java.awt.image.BufferedImage;  
import javax.imageio.ImageIO;  
import javax.servlet.ServletOutputStream;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.stereotype.Controller;  
import org.springframework.web.bind.annotation.RequestMapping;  
import org.springframework.web.servlet.ModelAndView;  
import com.google.code.kaptcha.Constants;  
import com.google.code.kaptcha.Producer;  
  
@Controller  
@RequestMapping("/")  
public class CaptchaImageCreateController {  
      
    private Producer captchaProducer = null;  
  
    @Autowired  
    public void setCaptchaProducer(Producer captchaProducer) {  
        this.captchaProducer = captchaProducer;  
    }  
  
    @RequestMapping("/captcha-image")  
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {  
  
        response.setDateHeader("Expires", 0);  
        // Set standard HTTP/1.1 no-cache headers.  
        response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");  
        // Set IE extended HTTP/1.1 no-cache headers (use addHeader).  
        response.addHeader("Cache-Control", "post-check=0, pre-check=0");  
        // Set standard HTTP/1.0 no-cache header.  
        response.setHeader("Pragma", "no-cache");  
        // return a jpeg  
        response.setContentType("image/jpeg");  
        // create the text for the image  
        String capText = captchaProducer.createText();  
        // store the text in the session  
        request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);  
        // create the image with the text  
        BufferedImage bi = captchaProducer.createImage(capText);  
        ServletOutputStream out = response.getOutputStream();  
        // write the data out  
        ImageIO.write(bi, "jpg", out);  
        try {  
            out.flush();  
        } finally {  
            out.close();  
        }  
        return null;  
    }  
  
}

 

前台调用方式

<div class="chknumber">  
       <label>验证码:          
       <input name="kaptcha" type="text" id="kaptcha" maxlength="4" class="chknumber_input" />               
       </label>  
        <img src="/ClinicCountManager/captcha-image.do" width="55" height="20" id="kaptchaImage"  style="margin-bottom: -3px"/>   
       <script type="text/javascript">      
        $(function(){           
            $('#kaptchaImage').click(function () {//生成验证码  
             $(this).hide().attr('src', '/ClinicCountManager/captcha-image.do?' + Math.floor(Math.random()*100) ).fadeIn(); })      
                  });   
        
       </script>   
     </div>

取验证码的方式

String code = (String)session.getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索边框
springmvc 验证码实例、kaptcha spring mvc、spring boot kaptcha、kaptcha 验证码样式、spring kaptcha,以便于您获取更多的相关知识。

时间: 2024-09-16 17:54:55

jsp spring mvc 框架集成google kaptcha生成验证码实例教程的相关文章

Spring MVC框架的高级配置

高级 本文将为您提供关于Spring MVC框架的配置技巧,以帮助管理基于Spring的web应用程序的多个实例.本配置管理主题常被学术界所忽略,但是,这对于现实的web开发尤为重要.本主题并不直接关联任何具体的技术,因此,我们将从最基本的概念开始对这个问题进行说明.下面,我们将根据Spring MVC框架,为基于本技术开发的项目提供一系列的解决方案. Spring配置 人们经常会在一台以上的主机上配置一种Web应用程序.例如,在生产中,一个网站可能只有一个实例.除了此实例外,开发人员可以在用于

spring MVC框架简介

1.spring mvc简介 springmvc是spring的一个模块,提供web层解决方案(基于mvc设计架构). 2.spring mvc框架流程图 第一步:用户发起request请求,请求至DispatcherServlet前端控制器 第二步:DispatcherServlet前端控制器请求HandlerMapping处理器映射器查找Handler                    DispatcherServlet:前端控制器,相当于中央调度器,各个组件都和前端控制器进行交互,降低

spring mvc 框架搭建及详解

现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理. 一.Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar包引入 Spring 2.5.6:spring.jar.spring-webmvc.jar.comm

使用spring mvc 框架,怎么才能将内容显示到页面上去呢

问题描述 使用spring mvc 框架,怎么才能将内容显示到页面上去呢 怎么将值传到我画的红线当中呢.第一次用这样的,不怎么会 整,求指教.谢谢了 解决方案 response=ServletActionContext.getResponse();JSONArray jsResult = new JSONArray();jsResult =JSONArray.fromObject(list);response.setContentType(""text/html; charset=UT

spring MVC框架好用

问题描述 有没有用过的,分享一下感受.5分 问题补充:谢谢anyasir 写道 解决方案 Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架.通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术.Velocity.Tiles.iText 和 POI.Spring MVC 框架并

Spring MVC 框架搭建配置方法及详解_JSP编程

现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理. 一.Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar包引入 Spring 2.5.6:spring.jar.spring-webmvc.jar.comm

方法-spring +mvc 框架 关于数据字典使用问题

问题描述 spring +mvc 框架 关于数据字典使用问题 项目中的数据字典是tomcat启动时加载数据,如果在数据库中添加数据,刷新界面数据不更新,只有重新启动tomcat才能界面显示数据,怎么在数据字典中加入方法,才能及时更新字典啊. 解决方案 这要看你的数据是从哪儿取得的呀!如果你是在数据库中取得的,这个应该是可以拿到的

easyui-关于spring mvc框架 easyUI界面将excel数据导入到数据库中的方法

问题描述 关于spring mvc框架 easyUI界面将excel数据导入到数据库中的方法 将一个excel表格的文件导入到数据库中,在界面调用得到所有数据的方法将数据显示在页面上,如何将excel表格的文件导入到数据库中呢 解决方案 可以使用poi 插件,对Excel进行操作,获取数据,保存到数据库中

在Spring MVC框架下 一个@Repository的dao中 可以同时注入hibernateTemplate和jdbcTemplate吗

问题描述 在Spring MVC框架下 一个@Repository的dao中 因为感觉jdbc查询起来编码比较方便 所有想引入spring jdbc的东西 这时一个dao中想同时注入hibernateTemplate和jdbcTemplate 这样做可以吗 存在什么潜在的问题吗? 配置XML文件<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method=