官方的色调单一,随机色也不随机,黑不拉几的,很难看。
为此做了扩展实现,并整合了spring mvc,生成的验证码漂亮多了。
官网:
http://code.google.com/p/patchca/
官方效果:
下面是我整合到spring并修扩展后的效果:
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中无需多余配置,这样就好,相当的简单。
本文出自 “熔 岩” 博客,转载请与作者联系!