前言
我们很多项目的登录功能都是需要有验证码验证,这样的验证时其实为了防止有人使用机器循环试探性登录。废话少说我们直接来上实例。
准备工作
eclipse,
我这次拿我现有的项目加入做例子,这个项目是 springMVC+spring+Hibernate框架的。我们的验证码主要用到springMVC框架。
示例
把配置信息配置到springMVC的配置文件springmvc-servlet.xml
源码:
<bean id="defaultKaptcha" 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">110</prop>
<!-- 验证码高度 -->
<prop key="kaptcha.image.height">50</prop>
<!-- 生成验证码内容范围 -->
<prop key="kaptcha.textproducer.char.string">0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ</prop>
<!-- 验证码个数 -->
<prop key="kaptcha.textproducer.char.length">4</prop>
<!-- 是否有边框 -->
<prop key="kaptcha.border">no</prop>
<!-- 边框颜色 -->
<prop key="kaptcha.border.color">105,179,90</prop>
<!-- 边框厚度 -->
<prop key="kaptcha.border.thickness">1</prop>
<!-- 验证码字体颜色 -->
<prop key="kaptcha.textproducer.font.color">black</prop>
<!-- 验证码字体大小 -->
<prop key="kaptcha.textproducer.font.size">30</prop>
<!-- 验证码所属字体样式 -->
<prop key="kaptcha.textproducer.font.names">楷体</prop>
<!-- 干扰线颜色 -->
<prop key="kaptcha.noise.color">black</prop>
<!-- 验证码文本字符间距 -->
<prop key="kaptcha.textproducer.char.space">3</prop>
<!-- 图片样式 :阴影-->
<prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.ShadowGimpy</prop>
</props>
</constructor-arg>
</bean>
</property>
</bean>
然后导入两个jar包这两个包是验证码要用到的。
filters-2.0.235-1.jar
kaptcha-2.3.2.jar
两个jar包分别在这两个链接中了,点击进入跳转页面然后按截图来下载,然后导入即可。
然后在controller类中注入
源码
@Autowired
private Producer kaptchaProducer = null;
编写方法生成图形验证码
源码:
@RequestMapping(value="/imgcode2", method=RequestMethod.GET)
public void createImgCode2(HttpServletResponse resp, HttpServletRequest req) throws IOException{
// 不需要浏览器进行图片缓存(浪费空间,因为只用一次)
resp.setDateHeader("Expires",0);
resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
resp.addHeader("Cache-Control", "post-check=0, pre-check=0");
resp.setHeader("Pragma", "no-cache");
resp.setContentType("image/jpeg");
// 产生随机数
String capText = kaptchaProducer.createText();
System.out.println("验证码:" + capText);
// 保存图片
req.getSession().setAttribute("img_stand2", capText);
// 创建图片
BufferedImage bi = kaptchaProducer.createImage(capText);
OutputStream os = resp.getOutputStream();
ImageIO.write(bi, "jpg", os);
os.flush();
os.close();
}
如有不足,请多多指教