Spring mvc框架下使用kaptcha生成驗證碼


1、下載jar包並導入。

  kaptcha-2.3.2.jar

2、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.image.width">65</prop>
                        <prop key="kaptcha.image.height">30</prop>
                        <prop key="kaptcha.textproducer.font.size">25</prop>
                        <prop key="kaptcha.textproducer.font.color">red</prop>
                        <prop key="kaptcha.textproducer.font.names">Arial</prop>
                        <prop key="kaptcha.textproducer.char.string">123456789</prop>
                        <prop key="kaptcha.textproducer.char.length">4</prop>
                        <prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.ShadowGimpy</prop>
                        <prop key="kaptcha.noise.impl">com.google.code.kaptcha.impl.NoNoise</prop> </props> </constructor-arg> </bean> </property> </bean>

配置項如下:

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  

3、jsp頁面。

    <script type='text/javascript'  src='${base}/js/jquery-1.10.2.min.js'></script>
    <script type="text/javascript">      
        
        $(function(){         
        $('#kaptchaImage').click(function () {//生成驗證碼  
             $(this).hide().attr('src', '${base}/captcha-image.htm?' + Math.floor(Math.random()*100) ).fadeIn();  
             event.cancelBubble=true;  
            });  
        }); 
        
        function changeCode() {  
            $('#kaptchaImage').hide().attr('src', '${base}/captcha-image.htm?' + 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="${base}/captcha-image.htm" id="kaptchaImage"  style="margin-bottom: -3px"/>  
          <a href="#" onclick="changeCode()">看不清?換一張</a>  
    </div>

4、創建驗證碼生成控制類CaptchaImageCreateController.java。

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

5、控制類獲取當前驗證碼。

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

 效果如圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM