kaptcha 是一個非常實用的驗證碼生成工具,是可配置的,非常靈活方便。kaptcha在web項目和spring mvc項目中的用法不一樣,下面介紹一下kaptcha在spring mvc中的使用。
1.下載kaptcha相關jar包:http://code.google.com/p/kaptcha/
maven項目pom.xml引用jar包配置:
<!-- kaptcha -->
<dependency>
<groupId>com.google.code</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3</version>
</dependency>
2.在spring mvc 配置文件中添加kaptcha驗證碼生成器
<!-- 驗證碼生成器 -->
<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">285</prop>
<prop key="kaptcha.textproducer.font.size">90</prop>
<prop key="kaptcha.image.height">126</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>
package com.iflytek.zhbs.controller.manage;
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.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;
/**
* 驗證碼圖片生成器
* @author dmwang4
*
*/
@Controller
@RequestMapping("/manage/kaptcha")
public class CaptchaImageCreateController{
/**
* 生成器producer
*/
private Producer captchaProducer = null;
/**
* 日誌記錄
*/
private static final Logger LOGGER = Logger.getLogger(CaptchaImageCreateController.class);
/**
* @param captchaProducer set方式注入參數
*/
@Autowired
public void setCaptchaProducer(Producer captchaProducer) {
this.captchaProducer = captchaProducer;
}
/**
* getKaptchaImage:生成二維碼圖片. <br/>
* @author lcma
* @param request
* @param response
* @throws Exception
* @since JDK 1.7
*/
@RequestMapping("getKaptchaImage")
public void getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
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);
LOGGER.info("******************驗證碼是: " + 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();
}
}
}
4.前臺jsp頁面獲取及點擊驗證碼刷新
<img src="./manage/kaptcha/getKaptchaImage.do" id="kaptchaImage" οnclick="kaptchaImage()" width="60px" height="25px" title="看不清,點擊換一張" />
function kaptchaImage(){
$('#kaptchaImage').attr('src','./manage/kaptcha/getKaptchaImage.do?' + Math.floor(Math.random() * 100));
}
5.在controller中獲取驗證碼進行驗證
String code = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);
6.kaptcha可配置項
<span style="font-size:12px;">
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
</span>