加入依賴
<!-- Kaptcha 驗證碼插件 -->
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
在 spring-mvc.xml 中加入
<!-- Kaptcha 圖片驗證碼 -->
<bean id="chptchaProducer" 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.string">abcdfkgujtmei123456789</prop>
-->
<prop key="kaptcha.textproducer.char.length">4</prop>
<prop key="kaptcha.textproducer.font.names">宋體幻妓,楷體钧萍,微軟雅黑</prop>
</props>
</constructor-arg>
</bean>
</property>
</bean>
屬性具體配置:http://www.reibang.com/p/e6c71bc37759
文本實現(xiàn)類:kaptcha.textproducer.impl
值為:com.google.code.kaptcha.text.impl.DefaultTextCreator
驗證碼值配置:kaptcha.textproducer.char.string
值:abcde2345678gfynmnpwx(隨意你自己寫)
驗證碼的長度:kaptcha.textproducer.char.length
值:
字體:kaptcha.textproducer.font.names
值:Arial,Courier
字體顏色:kaptcha.textproducer.font.color
值: r,g,b 或者 white,black,blue
文字間隔:kaptcha.textproducer.char.space
值:
干擾實現(xiàn)類:kaptcha.noise.impl
值:com.google.code.kaptcha.impl.DefaultNoise/NoNoise
干擾顏色:kaptcha.noise.color
值: r,g,b 或者 white,black,blue
圖片樣式:kaptcha.obscurificator.imp
l 值:
水紋com.google.code.kaptcha.impl.WaterRipple
甚带;
魚眼com.google.code.kaptcha.impl.FishEyeGimpy
优俘;
陰影com.google.code.kaptcha.impl.ShadowGimpy
背景實現(xiàn)類:kaptcha.background.imp
l 值:com.google.code.kaptcha.impl.DefaultBackground
背景漸變色開始:kaptcha.background.clear.from
值:r,g,b 或者 white,black,blue
背景漸變色結束:kaptcha.background.clear.to
值:r,g,b 或者 white,black,blue
文字渲染器:kaptcha.word.impl
值:com.google.code.kaptcha.text.impl.DefaultWordRenderer
session中存放驗證碼的key鍵:kaptcha.session.key
值:KAPTCHA_SESSION_KEY
Contro;;er 中實現(xiàn)
/**
* 驗證碼生成
* @param request
* @param response
* @return
* @throws IOException
*/
@RequestMapping(value="/captcha-image")
public ModelAndView getKaptchaImage(HttpServletRequest request, HttpServletResponse response) throws IOException {
System.out.println(request);
System.out.println(response);
// 從 session 獲取驗證碼的 code 值
HttpSession session = request.getSession();
System.out.println(session);
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/png");
// 設置 session
String capText = captchaProducer.createText();
System.out.println("設置session:" + capText);
session.setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);
// 輸出驗證碼
BufferedImage bi = captchaProducer.createImage(capText);
ServletOutputStream out = response.getOutputStream();
ImageIO.write(bi, "png", out);
out.flush();
out.close();
return null;
}
/**
* 驗證碼校驗
* @param request
* @param response
* @param code_j
* @return
* @throws Exception
*/
@RequestMapping("/codeCheck")
public String codeCheck(HttpServletRequest request, HttpServletResponse response,
@RequestParam("code")String code_j) throws Exception {
HttpSession session = request.getSession();
String code = (String) session.getAttribute(Constants.KAPTCHA_SESSION_KEY);
JSONObject json = new JSONObject();
if (code_j.equals(code)) {
json.put("ok", true);
} else {
json.put("ok", false);
}
ResponseUtil.write(response, json);
return null;
}
JSP 頁面
<tr>
<td>驗證碼:</td>
<td><input id="j_code" type="text" name="j_code" onblur="javascript:codeCheck()"></td>

<a href="javascript:chageCode()">看不清?換一張</a>
</tr>
<script type="text/javascript">
// 刷新驗證碼
function chageCode() {
var time = new Date().getTime();
$("#kaptchaImage").attr('src', '${path }/test/captcha-image?id='+time);
}
// Ajax 驗證驗證碼
function codeCheck() {
var code = $('#inputImagecode').val();
$.post(
'${path}/codeCheck',
{
'code' : code
},
function(result) {
if(result.ok) {
//alert("驗證碼正確谬晕!");
$('#inputImagecode').css('background-color', 'rgba(91, 255, 173, 0.2)')
$('#submitbtn').addAttr('onsubmit');
} else {
//alert("驗證碼錯誤宿亡!");
$('#inputImagecode').css('background-color', 'rgba(255, 81, 81, 0.2)')
$('#submitbtn').removeAttr('onsubmit');
}
}, 'json');
}
</script>