patchca整合Spring MVC生成超炫的验证码
http://lavasoft.blog.51cto.com/62575/1406947/
官方的色调单一,随机色也不随机,黑不拉几的,很难看。
为此做了扩展实现,并整合了spring mvc,生成的验证码漂亮多了。
官网:
http://code.google.com/p/patchca/
官方效果:
下面是我整合到spring并修扩展后的效果:
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 | package com.lavasoft.ntv.web; import org.patchca.color.ColorFactory; import org.patchca.filter.predefined.; import org.patchca.service.ConfigurableCaptchaService; import org.patchca.utils.encoder.EncoderHelper; import org.patchca.word.RandomWordFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.awt. ; import java.io.IOException; import java.util.Random; /*
patchca生成多彩验证码
@author leizhimin 14-5-5 下午11:51 */ @Controller public class Login2Controller { 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); } @RequestMapping ( “/pcrimg” ) public void crimg(HttpServletRequest request, HttpServletResponse response) throws 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( “captchaToken” , 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); } } |
Spring中无需多余配置,这样就好,相当的简单。
还没有评论,来说两句吧...