zoukankan      html  css  js  c++  java
  • java验证码Captcha

    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);
        }
    }
  • 相关阅读:
    大学该怎么度过
    MHA启动及关闭
    Qt多线程编程总结(二)——QMutex
    Qt多线程编程总结(一)(所有GUI对象都是线程不安全的)
    Qt中QFtp获取带有中文的文件名称出现乱码的解决方法(执行操作前就转换编码)
    QT实现拖放文件(有例子,并且图文并茂,非常清楚)
    QT5程序发布dll依赖
    通过Thrift访问HDFS分布式文件系统的性能瓶颈分析
    ExtJS面向对象
    Linq4j简明介绍
  • 原文地址:https://www.cnblogs.com/rubekid/p/5514422.html
Copyright © 2011-2022 走看看