spring mvc 使用kaptcha生成验证码

来源:互联网 发布:图像 meanshift算法 编辑:程序博客网 时间:2024/05/16 08:51

1.spring 配置文件 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">yes</prop><prop key="kaptcha.border.color">105,179,90</prop><prop key="kaptcha.textproducer.font.color">blue</prop><prop key="kaptcha.image.width">125</prop><prop key="kaptcha.image.height">45</prop><prop key="kaptcha.textproducer.font.size">45</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.vopzoon.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 {@Autowiredprivate Producer captchaProducer = null;@RequestMappingpublic 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 jpegresponse.setContentType("image/jpeg");// create the text for the imageString capText = captchaProducer.createText();// store the text in the sessionsession.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);// create the image with the textBufferedImage bi = captchaProducer.createImage(capText);ServletOutputStream out = response.getOutputStream();// write the data outImageIO.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>

4.controller中取得校验码

String kaptchaExpected = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);

5.kaptcha可配置项

kaptcha.border  是否有边框  默认为true  我们可以自己设置yes,nokaptcha.border.color   边框颜色   默认为Color.BLACKkaptcha.border.thickness  边框粗细度  默认为1kaptcha.producer.impl   验证码生成器  默认为DefaultKaptchakaptcha.textproducer.impl   验证码文本生成器  默认为DefaultTextCreatorkaptcha.textproducer.char.string   验证码文本字符内容范围  默认为abcde2345678gfynmnpwxkaptcha.textproducer.char.length   验证码文本字符长度  默认为5kaptcha.textproducer.font.names    验证码文本字体样式  默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)kaptcha.textproducer.font.size   验证码文本字符大小  默认为40kaptcha.textproducer.font.color  验证码文本字符颜色  默认为Color.BLACKkaptcha.textproducer.char.space  验证码文本字符间距  默认为2kaptcha.noise.impl    验证码噪点生成对象  默认为DefaultNoisekaptcha.noise.color   验证码噪点颜色   默认为Color.BLACKkaptcha.obscurificator.impl   验证码样式引擎  默认为WaterRipplekaptcha.word.impl   验证码文本字符渲染   默认为DefaultWordRendererkaptcha.background.impl   验证码背景生成器   默认为DefaultBackgroundkaptcha.background.clear.from   验证码背景颜色渐进   默认为Color.LIGHT_GRAYkaptcha.background.clear.to   验证码背景颜色渐进   默认为Color.WHITEkaptcha.image.width   验证码图片宽度  默认为200kaptcha.image.height  验证码图片高度  默认为50 

转载地址:http://blog.csdn.net/rambo_china/article/details/7720181

0 0
原创粉丝点击