该验证码使用的谷歌的kaptcha,在他的基础上去掉了模糊的属性,和官方的jar包有区别。不废话,贴代码。
<bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
<property name="config">
<bean class="com.google.code.kaptcha.util.Config">
<!--通过构造函数注入属性值 -->
<constructor-arg type="java.util.Properties">
<props>
<!-- 验证码宽度 -->
<prop key="kaptcha.image.width">90</prop>
<!-- 验证码高度 -->
<prop key="kaptcha.image.height">36</prop>
<!-- 生成验证码内容范围 -->
<prop key="kaptcha.textproducer.char.string">0123456789</prop>
<!-- 验证码个数 -->
<prop key="kaptcha.textproducer.char.length">4</prop>
<!-- 是否有边框 -->
<prop key="kaptcha.border">yes</prop>
<!-- 边框颜色 -->
<prop key="kaptcha.border.color">black</prop>
<!-- 边框厚度 -->
<prop key="kaptcha.border.thickness">1</prop>
<!-- 验证码字体颜色 -->
<prop key="kaptcha.textproducer.font.color">black</prop>
<!-- 验证码字体大小 -->
<prop key="kaptcha.textproducer.font.size">33</prop>
<!-- 验证码所属字体样式 -->
<prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>
<prop key="kaptcha.noise.impl">com.google.code.kaptcha.impl.NoNoise</prop>
<!-- 干扰线颜色 -->
<!--<prop key="kaptcha.noise.color">blue</prop>
--><!-- 验证码文本字符间距 -->
<prop key="kaptcha.textproducer.char.space">3</prop> <pre name="code" class="html"> <!-- 该属性官方jar包没有,否则会报错,下面会帖jar包连接的 -->
<prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.NoWater</prop>
</props>
</constructor-arg>
</bean>
</property>
</bean>
页面上添加
<img class="kaptcha" id="kaptcha" src="kaptcha/kaptcha.do"/>
另外别忘了加上jquery。因为下面用到了点击换验证码
$(function (){
$('#kaptcha').click(
function (){
$(this).attr('src', 'kaptcha/kaptcha.do?' + Math.floor(Math.random() * 100));
}
);
});
我的spring拦截的后缀为.do的文件,大家根据自己的项目去修改。
@Controller("kaptchaController")
@RequestMapping("/kaptcha")
public class KaptchaController {
@Autowired
private Producer captchaProducer;
@RequestMapping("/kaptcha.do")
public void initCaptcha(HttpServletRequest request,
HttpServletResponse response) throws Exception{
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();
request.getSession().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();
}
}
}
大家可以去下载我的jar包
http://download.csdn.net/detail/u014274324/7997245
下面是效果