1. 程式人生 > >SpringMVC 使用kaptcha生成驗證碼

SpringMVC 使用kaptcha生成驗證碼

1.新增jar包,官網就可以下載

這裡寫圖片描述

2.配置spring-controller.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>

3.控制類的實現

package com.snnu.edu.controller;

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;  

@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();  
          System.out.println(capText);
        // 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;  
    }  

}  

4.用於測試的jsp頁面程式碼:

<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>  
<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>  

此時,驗證碼已經生成了,用於登入驗證的時候,可從session中取出即可進行驗證。。。

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