java实用验证码的实现代码
内容摘要
本文为大家分享了java实用验证码的实现代码,供大家参考,具体内容如下
1、ValidCode
package validImg;
import java.awt.Color;
import java.io.IOException;
imp
1、ValidCode
package validImg;
import java.awt.Color;
import java.io.IOException;
imp
文章正文
本文为大家分享了java实用验证码的实现代码,供大家参考,具体内容如下
1、ValidCode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | package validImg; import java.awt.Color; import java.io.IOException; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import com.github.bingoohuang.patchca.color.ColorFactory; import com.github.bingoohuang.patchca.custom.ConfigurableCaptchaService; import com.github.bingoohuang.patchca.filter.predefined.CurvesRippleFilterFactory; import com.github.bingoohuang.patchca.filter.predefined.DiffuseRippleFilterFactory; import com.github.bingoohuang.patchca.filter.predefined.DoubleRippleFilterFactory; import com.github.bingoohuang.patchca.filter.predefined.MarbleRippleFilterFactory; import com.github.bingoohuang.patchca.filter.predefined.WobbleRippleFilterFactory; import com.github.bingoohuang.patchca.utils.encoder.EncoderHelper; import com.github.bingoohuang.patchca.word.RandomWordFactory; public class ValidCode extends HttpServlet { private static ConfigurableCaptchaService cs = new ConfigurableCaptchaService(); private static Random random = new Random(); static { // cs.setColorFactory(new SingleColorFactory(new Color(25, 60, 170))); cs.setColorFactory( new ColorFactory() { @Override public Color getColor(int x) { int[] c = new int[3]; int i = random.nextInt(c.length); for (int fi = 0; fi < c.length; fi++) { if (fi == i) { c[fi] = random.nextInt(71); } else { c[fi] = random.nextInt(256); } } return new Color(c[0], c[1], c[2]); } }); RandomWordFactory wf = new RandomWordFactory(); wf.setCharacters( "23456789abcdefghigkmnpqrstuvwxyzABCDEFGHIGKLMNPQRSTUVWXYZ" ); wf.setMaxLength(4); wf.setMinLength(4); cs.setWordFactory(wf); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { switch (random.nextInt(5)) { case 0: cs.setFilterFactory( new CurvesRippleFilterFactory(cs .getColorFactory())); break ; case 1: cs.setFilterFactory( new MarbleRippleFilterFactory()); break ; case 2: cs.setFilterFactory( new DoubleRippleFilterFactory()); break ; case 3: cs.setFilterFactory( new WobbleRippleFilterFactory()); break ; case 4: cs.setFilterFactory( new DiffuseRippleFilterFactory()); break ; } HttpSession session = request.getSession(false); if (session == null) { session = request.getSession(); } setResponseHeaders(response); String token = EncoderHelper.getChallangeAndWriteImage(cs, "png" , response.getOutputStream()); session.setAttribute( "validCode" , token); System.out.println( "当前的SessionID=" + session.getId() + ",验证码= ," + token); } protected void setResponseHeaders(HttpServletResponse response) { response.setContentType( "image/png" ); response.setHeader( "Cache-Control" , "no-cache, no-store" ); response.setHeader( "Pragma" , "no-cache" ); long time = System.currentTimeMillis(); response.setDateHeader( "Last-Modified" , time); response.setDateHeader( "Date" , time); response.setDateHeader( "Expires" , time); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } } |
2.XML代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <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> |
以上就是本文的全部内容,希望对大家的学习有所帮助。
代码注释