java实用验证码的实现代码
本文为大家分享了java实用验证码的实现代码,供大家参考,具体内容如下
1、ValidCode
packagevalidImg; importjava.awt.Color; importjava.io.IOException; importjava.util.Random; importjavax.servlet.ServletException; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjavax.servlet.http.HttpSession; importcom.github.bingoohuang.patchca.color.ColorFactory; importcom.github.bingoohuang.patchca.custom.ConfigurableCaptchaService; importcom.github.bingoohuang.patchca.filter.predefined.CurvesRippleFilterFactory; importcom.github.bingoohuang.patchca.filter.predefined.DiffuseRippleFilterFactory; importcom.github.bingoohuang.patchca.filter.predefined.DoubleRippleFilterFactory; importcom.github.bingoohuang.patchca.filter.predefined.MarbleRippleFilterFactory; importcom.github.bingoohuang.patchca.filter.predefined.WobbleRippleFilterFactory; importcom.github.bingoohuang.patchca.utils.encoder.EncoderHelper; importcom.github.bingoohuang.patchca.word.RandomWordFactory; publicclassValidCodeextendsHttpServlet{ privatestaticConfigurableCaptchaServicecs=newConfigurableCaptchaService(); privatestaticRandomrandom=newRandom(); static{ //cs.setColorFactory(newSingleColorFactory(newColor(25,60,170))); cs.setColorFactory(newColorFactory(){ @Override publicColorgetColor(intx){ int[]c=newint[3]; inti=random.nextInt(c.length); for(intfi=0;fi<c.length;fi++){ if(fi==i){ c[fi]=random.nextInt(71); }else{ c[fi]=random.nextInt(256); } } returnnewColor(c[0],c[1],c[2]); } }); RandomWordFactorywf=newRandomWordFactory(); wf.setCharacters("23456789abcdefghigkmnpqrstuvwxyzABCDEFGHIGKLMNPQRSTUVWXYZ"); wf.setMaxLength(4); wf.setMinLength(4); cs.setWordFactory(wf); } publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ switch(random.nextInt(5)){ case0: cs.setFilterFactory(newCurvesRippleFilterFactory(cs .getColorFactory())); break; case1: cs.setFilterFactory(newMarbleRippleFilterFactory()); break; case2: cs.setFilterFactory(newDoubleRippleFilterFactory()); break; case3: cs.setFilterFactory(newWobbleRippleFilterFactory()); break; case4: cs.setFilterFactory(newDiffuseRippleFilterFactory()); break; } HttpSessionsession=request.getSession(false); if(session==null){ session=request.getSession(); } setResponseHeaders(response); Stringtoken=EncoderHelper.getChallangeAndWriteImage(cs,"png", response.getOutputStream()); session.setAttribute("validCode",token); System.out.println("当前的SessionID="+session.getId()+",验证码=,"+token); } protectedvoidsetResponseHeaders(HttpServletResponseresponse){ response.setContentType("image/png"); response.setHeader("Cache-Control","no-cache,no-store"); response.setHeader("Pragma","no-cache"); longtime=System.currentTimeMillis(); response.setDateHeader("Last-Modified",time); response.setDateHeader("Date",time); response.setDateHeader("Expires",time); } publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ } }
2.XML代码
<dependency> <groupId>com.github.bingoohuang</groupId> <artifactId>patchca</artifactId> <version>0.0.1</version> </dependency> <servlet> <servlet-name>ValidCode</servlet-name> <servlet-class>validImg.ValidCode</servlet-class> </servlet> <servlet-mapping> <servlet-name>ValidCode</servlet-name> <url-pattern>/validImg.jpg</url-pattern> </servlet-mapping>
以上就是本文的全部内容,希望对大家的学习有所帮助。