kaptcha驗證碼在spring mvc中的使用

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>


3.在spring mvc 的controller層添加生成驗證碼圖片控制類,生成的驗證碼存放在HttpSession中。

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>





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章