图形验证码
Kaptcha验证码组件
- Kaptcha是谷歌开源的可高度配置的实用验证码生成工具
- 通过Kaptcha可阻拦大多数机器人脚本操作
- Kaptcha典型应用于注册、登录、重要信息提交等用户交互
Kaptcha使用步骤
- Kaptcha配置验证码生成参数
- 开发KapatchaController生成验证码图片
- 将前台输入验证码与session保存的验证码进行比对
首先在pom.xml文件中加入依赖
<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version></dependency>
再在applicationContext.xml进行配置
<!--配置Kaptcha--><beanid="kaptchaProducer"class="com.google.code.kaptcha.impl.DefaultKaptcha"><propertyname="config"><beanclass="com.google.code.kaptcha.util.Config"><constructor-arg><props><!--验证码图片不生成边框--><propkey="kaptcha.border">no</prop><!--验证码图片宽度为120像素--><propkey="kaptcha.image.width">120</prop><!--验证码图片字体颜色为蓝色--><propkey="kaptcha.textproducer.font.color">blue</prop><!--每个字符最大占用40像素--><propkey="kaptcha.textproducer.font.size">40</prop><!--验证码包含4个字符--><propkey="kaptcha.textproducer.char.length">4</prop></props></constructor-arg></bean></property></bean>
Controller类
publicclassKaptchaController { privateProducerkaptchaProducer; "/api/verify_code") (publicvoidcreateVerifyCode(HttpServletRequestrequest , HttpServletResponseresponse) throwsIOException { //响应立即过期(通知浏览器让缓存立即失效,否则会导致无法刷新验证码)response.setDateHeader("Expires" , 0); //不缓存任何图片数据response.setHeader("Cache-Control" , "no-store,no-cache,must-revalidate"); response.setHeader("Cache-Control" ,"post-check=0,pre-check=0"); response.setHeader("Pragma" , "no-cache"); response.setContentType("image/png"); //生成验证码图片Stringtext=kaptchaProducer.createText(); request.getSession().setAttribute("kaptchaVerifyCode" , text); BufferedImageimage=kaptchaProducer.createImage(text); ServletOutputStreamoutputStream=response.getOutputStream(); ImageIO.write(image, "png", outputStream); outputStream.flush();//对客户端输出outputStream.close(); } }
使用验证码图片
确认验证码是否正确