springMVC实现图形验证码(kaptcha)代码实例
springMVC项目中实现图形验证码功能,可以使用kaptcha来实现,下面是步骤
一、引入架包,pom.xml
com.google.code kaptcha 2.3.2
二、kaptchaProducer配置,需要在spring-mvc.xml中对kaptchaProducer的bean进行配置,可以对验证码图形的属性进行配置,网上也有很多可以参考的,我这是放我项目中的相关代码
yes 105,179,90 blue 125 60 40 code 4 宋体,楷体,微软雅黑
三、kaptchaProducer配置完毕后,就只可以写生成验证码的方法了。
@Autowired privateProducercaptchaProducer=null; /** *生成验证码 *@paramrequest *@paramresponse *@throwsIOException */ @RequestMapping("/yzmImg") publicvoidyzmImg(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{ log.info("-----生成验证码-----"); HttpSessionsession=request.getSession(); StringpreCode=(String)session.getAttribute(Constants.KAPTCHA_SESSION_KEY); log.info("-----生成验证码-----前一个验证码:"+preCode); System.out.println("-----生成验证码-----前一个验证码:"+preCode); //生成验证码 response.setDateHeader("Expires",0); //SetstandardHTTP/1.1no-cacheheaders. response.setHeader("Cache-Control","no-store,no-cache,must-revalidate"); //SetIEextendedHTTP/1.1no-cacheheaders(useaddHeader). response.addHeader("Cache-Control","post-check=0,pre-check=0"); //SetstandardHTTP/1.0no-cacheheader. response.setHeader("Pragma","no-cache"); //returnajpeg response.setContentType("image/jpeg"); //createthetextfortheimage StringcapText=captchaProducer.createText(); System.err.println(capText); //storethetextinthesession session.setAttribute(Constants.KAPTCHA_SESSION_KEY,capText); session.setAttribute(Constants.KAPTCHA_SESSION_DATE,newDate()); //存放到缓存服务器上,并把key记录到cookie //CodeUtils.creatCode(capText,response,request); //createtheimagewiththetext BufferedImagebi=captchaProducer.createImage(capText); ServletOutputStreamout=response.getOutputStream(); //writethedataout ImageIO.write(bi,"jpg",out); try{ out.flush(); }finally{ out.close(); } }
四、生成验证码的方法写完后,前端可以使用img标签作为图形验证码的容器
jsp代码
javascript代码
functiongetYZMImg(){ $("#yzmimg").attr("src","https://www.haoziyuan.ccyzmImg.htm"); }
img作为图形的容器,src写生成验证码的映射,如果需要换一个验证码,点击图片,onclick事件重新调用生成验证码的方法,即可达到更换验证码。
下面说下我遇到的几个问题
一、异常,异常信息
Causedby:org.springframework.beans.factory.NoSuchBeanDefinitionException:Noqualifyingbeanoftype'com.google.code.kaptcha.Producer'available:expectedatleast1beanwhichqualifiesasautowirecandidate. Dependencyannotations:{@org.springframework.beans.factory.annotation.Autowired(required=true)}
我说下具体的情况,代码我写完了之后,就启动服务,可是报了上面的异常,可是我仔细检查了,代码都没有问题,但就是抛异常,最后在类的前面加了两个注解
@Controller @Scope("prototype") @SuppressWarnings("all") publicclassIndexController{ }
其中Scope和SuppressWarnings两个注解加上之后,启动服务就不会抛这个异常了。
二、异常,上面的异常解决之后,又出现了下面这个异常
java.lang.NoClassDefFoundError:com/jhlabs/image/RippleFilter]withrootcause java.lang.ClassNotFoundException:com.jhlabs.image.RippleFilter
提示RippleFilter类找不到,所以加入Filter架包,我是直接加入的架包,架包名为:filters-2.0.235-1.jar,加入这个架包就不会抛异常了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。