kaptcha验证码Demo

请注意,本文编写于 2747 天前,最后修改于 240 天前,其中某些信息可能已经过时。

为了防止程序破解系统登录,一般都会采用登录+验证码的措施。

kaptcha是我用到的最好用的一个验证码工具,使用非常的简单。

瞧瞧我在项目中使用的效果吧!感觉还是很不错的。

http://lh5.ggpht.com/-Vfq77phVbNQ/TuYhXdChLpI/AAAAAAAAAEc/NL_fI-Tljgo/s144/kaptcha-example.jpg
http://lh5.ggpht.com/-Vfq77phVbNQ/TuYhXdChLpI/AAAAAAAAAEc/NL_fI-Tljgo/s144/kaptcha-example.jpg



效果还不错的,就是美化不怎么好,好在kaptcha的自定义功能很强,可以根据需要自定义自己的效果。



kaptcha的配置属性











































































































































































































































ConstantDescriptionDefault kaptcha.border 是否有边框 默认为yes 我们可以自己设置yes,no  yes kaptcha.border.color 边框颜色 默认为Color.BLACK  black kaptcha.border.thickness 边框粗细度 默认为1  1 kaptcha.image.width 验证码图片宽度 默认为200  200 kaptcha.image.height 验证码图片高度 默认为50  50 kaptcha.producer.impl 验证码生成器 com.google.code.kaptcha.impl.DefaultKaptcha kaptcha.textproducer.impl 验证码文本生成器 com.google.code.kaptcha.text.impl.DefaultTextCreator kaptcha.textproducer.char.string 验证码文本字符内容范围 abcde2345678gfynmnpwx kaptcha.textproducer.char.length 验证码文本字符长度 5 kaptcha.textproducer.char.space 验证码文本字符间距 默认为2  2 kaptcha.textproducer.font.names 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)  Arial, Courier kaptcha.textproducer.font.size 验证码文本字符大小 40px. kaptcha.textproducer.font.color 验证码文本字符颜色 默认为Color.BLACK  black kaptcha.noise.impl 验证码噪点生成对象 com.google.code.kaptcha.impl.DefaultNoise kaptcha.noise.color 验证码噪点颜色 默认为Color.BLACK  black kaptcha.obscurificator.impl 验证码样式引擎 默认为WaterRipple  com.google.code.kaptcha.impl.WaterRipple kaptcha.background.impl 验证码背景生成器 默认为DefaultBackground  com.google.code.kaptcha.impl.DefaultBackground kaptcha.background.clear.from 验证码背景颜色渐进 默认为Color.LIGHT_GRAY  light grey kaptcha.background.clear.to 验证码背景颜色渐进 默认为Color.WHITE  white kaptcha.word.impl 验证码文本字符渲染 默认为DefaultWordRenderer  com.google.code.kaptcha.text.impl.DefaultWordRenderer kaptcha.session.key 放入session的key名称 KAPTCHA_SESSION_KEY kaptcha.session.date session中key的存活时间 KAPTCHA_SESSION_DATE



kaptcha中验证码样式引擎有WaterRipple(水纹类似的)、ShadowGimpy(投影)、FishEyeGimpy(鱼眼)三种样式,在将图片缩小一些后,有这些样式,就很难辨认了。所以,我就增加了一种没有干扰效果的样式,NoGimpy,代码很简单。







1:package com.google.code.kaptcha.impl;




2:  




3:import java.awt.Graphics2D;




4:import java.awt.image.BufferedImage;




5:  




6:import com.google.code.kaptcha.GimpyEngine;




7:import com.google.code.kaptcha.util.Configurable;




8:  




9:publicclass NoGimpy extends Configurable implements GimpyEngine {




10:  




11:public BufferedImage getDistortedImage(BufferedImage baseImage) {




12:         BufferedImage distortedImage = new BufferedImage(baseImage.getWidth(),




13:                 baseImage.getHeight(), BufferedImage.TYPE_INT_ARGB);




14:  




15:         Graphics2D graph = (Graphics2D) distortedImage.getGraphics();




16:         graph.drawImage(baseImage, 0, 0, null, null);




17:         graph.dispose();




18:return distortedImage;




19:     }




20:  




21: }






class文件已经打包到kaptcha-2.3.2.1.jar中了,这个其实可以自定义在自己的项目中的,只不过我是为了方便以后使用,省的每次都复制代码。





 



kaptcha在spring中也是可以使用的,我采用的是servlet的方式。为了统一整体框架,推荐使用spring的方式,如果是简单好用,那就用servlet吧!



注:如果在spring中是配置web.xml,session中是取不到key值的,因为spring本身就是个单独的applicationcontext,要不就采用servlet的方式,要不就用spring的方式。



spring的方式



1.bean配置,初始化默认水属性







1:<beanid="captchaProducer"class="com.google.code.kaptcha.impl.DefaultKaptcha">




2:<propertyname="config">




3:<beanclass="com.google.code.kaptcha.util.Config">




4:<constructor-arg>




5:<props>




6:<propkey="kaptcha.border">no</prop>




7:<propkey="kaptcha.border.color">105,179,90</prop>




8:<propkey="kaptcha.textproducer.font.color">red</prop>




9:<propkey="kaptcha.image.width">250</prop>




10:<propkey="kaptcha.textproducer.font.size">90</prop>




11:<propkey="kaptcha.image.height">90</prop>




12:<propkey="kaptcha.session.key">code</prop>




13:<propkey="kaptcha.textproducer.char.length">4</prop>




14:<propkey="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>




15:</props>




16:</constructor-arg>




17:</bean>




18:</property>




19:</bean>






2.后台action







1: @RequestMapping("/captcha-image")




2:public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)




3:throws Exception {




4:         response.setDateHeader("Expires", 0);




5:// Set standard HTTP/1.1 no-cache headers.




6:         response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");




7:// Set IE extended HTTP/1.1 no-cache headers (use addHeader).




8:         response.addHeader("Cache-Control", "post-check=0, pre-check=0");




9:// Set standard HTTP/1.0 no-cache header.




10:         response.setHeader("Pragma", "no-cache");




11:// return a jpeg




12:         response.setContentType("image/jpeg");




13:// create the text for the image




14:         String capText = captchaProducer.createText();




15:// store the text in the session




16:         request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);




17:// create the image with the text




18:         BufferedImage bi = captchaProducer.createImage(capText);




19:         ServletOutputStream out = response.getOutputStream();




20:// write the data out




21:         ImageIO.write(bi, "jpg", out);




22:try {




23:             out.flush();




24:         } finally {




25:             out.close();




26:         }




27:return null;




28:     }






3.页面调用







1:<inputname="kaptcha"type="text"id="kaptcha"/>




2:<imgsrc="/captcha-image.do"width="55"height="20"id="kaptchaImage"/>






4.验证







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






下载:kaptcha修改版 | kaptcha演示demo

← 上一篇 下一篇 →
Comments

添加新评论