利用kaptcha實現驗證碼(SpringMVC實現)

1.首先需要導入jar包

2.配置spring的配置文件applicationContext.xml

    <!-- 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">yes</prop>
    <prop key="kaptcha.border.color">105,179,90</prop>
    <prop key="kaptcha.textproducer.font.color">blue</prop>
    <prop key="kaptcha.image.width">120</prop>
    <prop key="kaptcha.image.height">40</prop>
    <prop key="kaptcha.textproducer.font.size">40</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>

其中,驗證碼相關的屬性如下,可以自己進行設置

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.創建生成驗證碼的controller,代碼如下

package com.book.controller;
import java.awt.image.BufferedImage;
import java.io.IOException;
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.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.portlet.ModelAndView;
import com.google.code.kaptcha.Constants;
import com.google.code.kaptcha.Producer;

@Controller  
@RequestMapping("/code") 
public class CaptchaController {
//從spring容器中取值
private  ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Producer captchaProducer = (Producer)ctx.getBean("captchaProducer");

@RequestMapping(value = "/captcha-image")
public ModelAndView getKaptchaImage(HttpServletRequest request,HttpServletResponse response) throws IOException{
HttpSession session = request.getSession();
String code = (String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
System.out.println("產生的驗證碼是:"+code);
//相關參數的設置
response.setDateHeader("Expires",0);
response.setHeader("Cache-Control","no-store, no-cache, must-revalidate");
response.addHeader("Cache-Control", "post-check=0, pre-check=0");  
        response.setHeader("Pragma", "no-cache");  
        response.setContentType("image/jpeg");
        String capText = captchaProducer.createText();  
        session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);  
        
        BufferedImage bi = captchaProducer.createImage(capText);  
        ServletOutputStream out = response.getOutputStream();  
        ImageIO.write(bi, "jpg", out); 
        try {
out.flush();
} finally{
out.close();
}
        return null;
}
}

4.登錄界面的相關代碼

<script type="text/javascript">
function changeR(node){
//用於點擊時產生不同的驗證碼
node.src = "./code/captcha-image?time="+new Date().getTime();
}
</script>

<tr>
<td>驗證碼:</td>
<td><input type="text" id="index_code" name="verifyCode"></td>
<td><img id="kaptchaImage" alt="驗證碼" src="./code/captcha-image" οnclick="changeR(this)" style="cursor:pointer;"/></td>
</tr>

5.在用戶登錄的controller中取值校驗可以使用如下代碼

//獲取生成的驗證碼
String code = (String) request.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY);

6.相關jar包的下載地址

http://pan.baidu.com/s/1bICWpC

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