java验证码Captcha
2016-05-21 12:10
447 查看
import java.awt.Color; import java.io.IOException; import java.util.Random; import javax.servlet.http.HttpServletResponse; import org.patchca.color.ColorFactory; import org.patchca.filter.predefined.CurvesRippleFilterFactory; import org.patchca.filter.predefined.DiffuseRippleFilterFactory; import org.patchca.filter.predefined.DoubleRippleFilterFactory; import org.patchca.filter.predefined.MarbleRippleFilterFactory; import org.patchca.filter.predefined.WobbleRippleFilterFactory; import org.patchca.service.ConfigurableCaptchaService; import org.patchca.utils.encoder.EncoderHelper; import org.patchca.word.RandomWordFactory; public class CaptchaUtil { private static ConfigurableCaptchaService cs = new ConfigurableCaptchaService(); private static Random random = new Random(); static { 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 static String generate(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; } setResponseHeaders(response); return EncoderHelper.getChallangeAndWriteImage(cs, "png", response.getOutputStream()); } private static 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); } }
相关文章推荐
- JAVA——Date类、Calendar类
- 基于注解的struts action跳转 @Result 跳转到另一个action
- Struts框架中,namespace什么意思?
- Eclipse中java项目引用dll库的路径设置
- JAVA-反射-getGenericSuperclass()
- Maven那点事儿(Eclipse版)
- 【codeforces】- Petya and Java(给不同的数,判断大小,选择不同数据类型)
- JAVA多线程之中断机制(stop()、interrupted()、isInterrupted())
- Java多线程(九)之ReentrantLock与Condition
- Context initialization failed org.springframework.beans.factory.BeanDefinitionStoreException: IOExc
- java 大数操作(加减乘除及取余)
- jni调用java数组导致VM aborting,安卓程序莫名闪退
- 关于:[Struts2]Caused by: com.opensymphony.xwork2.inject.DependencyException:
- spring-mybatis整合测试
- java遍历给定目录,树形结构输出所有文件,包括子目录中的文件
- Java静态的应用
- android studio 与eclipse创建命名空间时候的区别
- hdu 1042 N! java大数及判断文件末尾
- Java 23种设计模式之抽象工厂模式详解
- java中代码执行顺序