• captche验证码


    JCaptcha 是一个用来生成验证码的开源Java类库

    CaptchaServiceSingleton类(单态类)

    package com.dongbin.testy;
    
    import com.octo.captcha.service.captchastore.FastHashMapCaptchaStore;
    import com.octo.captcha.service.image.DefaultManageableImageCaptchaService;
    import com.octo.captcha.service.image.ImageCaptchaService;
    
    public class CaptchaServiceSingleton {
    
        private static ImageCaptchaService instance = 
                new DefaultManageableImageCaptchaService( new FastHashMapCaptchaStore(), new ImageCaptchaEngineExtend(),  
                        180, 100000, 75000);
        
        public static ImageCaptchaService getInstance(){
            return instance;
        }
    }
    ImageCaptchaEngineExtend类 (扩展验证码格式)

    package com.dongbin.testy;
    
    import java.awt.Color;
    import java.awt.Font;
    import com.octo.captcha.component.image.backgroundgenerator.BackgroundGenerator;
    import com.octo.captcha.component.image.backgroundgenerator.UniColorBackgroundGenerator;
    import com.octo.captcha.component.image.color.RandomRangeColorGenerator;
    import com.octo.captcha.component.image.fontgenerator.FontGenerator;
    import com.octo.captcha.component.image.fontgenerator.RandomFontGenerator;
    import com.octo.captcha.component.image.textpaster.DecoratedRandomTextPaster;
    import com.octo.captcha.component.image.textpaster.TextPaster;
    import com.octo.captcha.component.image.textpaster.textdecorator.BaffleTextDecorator;
    import com.octo.captcha.component.image.textpaster.textdecorator.LineTextDecorator;
    import com.octo.captcha.component.image.textpaster.textdecorator.TextDecorator;
    import com.octo.captcha.component.image.wordtoimage.ComposedWordToImage;
    import com.octo.captcha.component.image.wordtoimage.WordToImage;
    import com.octo.captcha.component.word.wordgenerator.RandomWordGenerator;
    import com.octo.captcha.component.word.wordgenerator.WordGenerator;
    import com.octo.captcha.engine.image.ListImageCaptchaEngine;
    import com.octo.captcha.image.gimpy.GimpyFactory;
    
    
    public class ImageCaptchaEngineExtend extends ListImageCaptchaEngine{
    
        @Override
        protected void buildInitialFactories() {
            int num = 5;//默认为5个
            
            //设置内容
            WordGenerator wgen =  new RandomWordGenerator("abcdefghijklmnopqrstuvwxyz123456789");
            //设置颜色
            RandomRangeColorGenerator cgen = new RandomRangeColorGenerator(
            new int[] { 100, 255 }, new int[] { 100, 255 },
            new int[] { 100, 255 });
            
            RandomRangeColorGenerator cgen1 = new RandomRangeColorGenerator(
                    new int[] { 0, 100 }, new int[] { 0, 100 },
                    new int[] { 0, 100 });
            
            
            //设置背景色
            BackgroundGenerator backgroundGenerator = new UniColorBackgroundGenerator(new Integer(80), new Integer(37),Color.WHITE);
            //设置字体
            Font[] fontsList = new Font[] { new Font("Arial", 0, 12),
                    new Font("Tahoma", 0, 12), new Font("Verdana", 0, 12), };
            FontGenerator fontGenerator = new RandomFontGenerator(new Integer(26),
                    new Integer(26), fontsList);
    //        BaffleTextDecorator baffleTextDecorator = new BaffleTextDecorator(1,cgen1);//气泡干扰 
            LineTextDecorator lineTextDecorator = new LineTextDecorator(0,cgen1);//曲线干扰 
            TextDecorator[] textDecorators = new TextDecorator[1];
    //        textDecorators[0] = baffleTextDecorator;  
            textDecorators[0] = lineTextDecorator; 
            TextPaster textPaster = new DecoratedRandomTextPaster(new Integer(num),new Integer(num), cgen, true,textDecorators);
    //        TextPaster textPaster = new DecoratedRandomTextPaster(new Integer(num),new Integer(num), cgen, true,
    //                new TextDecorator[] { new BaffleTextDecorator(new Integer(1), Color.WHITE) });
            WordToImage wordToImage = new ComposedWordToImage(fontGenerator,backgroundGenerator, textPaster);
            this.addFactory(new GimpyFactory(wgen, wordToImage));
            
        }
    
    }
    
    

    ImageCaptchaServlet类

    package com.dongbin.testy;
    
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.octo.captcha.service.CaptchaServiceException;
    
    public class ImageCaptchaServlet extends HttpServlet {
    
        private static final long serialVersionUID = 1L;
    
        public void init(ServletConfig servletConfig) throws ServletException {  
              
                super.init(servletConfig);  
          
         }  
          
          
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
              
            response.setHeader("Cache-Control", "no-store");  
            response.setHeader("Pragma", "no-cache");  
            response.setDateHeader("Expires", 0);  
            response.setContentType("image/jpeg");  
            ServletOutputStream out = response.getOutputStream();  
            try {  
                String captchaId = request.getSession(true).getId();  
                BufferedImage challenge = (BufferedImage)  CaptchaServiceSingleton.getInstance().getChallengeForID(captchaId, request.getLocale());  
                ImageIO.write(challenge, "jpg", out);  
                out.flush();  
            } catch (CaptchaServiceException e) {  
            } finally {  
                out.close();  
            }  
        }
    }

    页面index.jsp

     <form action="testjcaptcha">
            <label for="j_captcha_response">请填写验证码:</label><br/>
            <img src="jcaptcha"alt="点击刷新" onClick="this.src='jcaptcha?t=' + Math.random();" align="absmiddle" style="vertical-align: bottom;margin: 10px 0 0 10px;cursor: pointer;">
            <input type="text" name="j_captcha_response" value="">
            <input type="submit" value="提交">
        </form>

    效果图

    验证VerifyCodeServlet类

    package com.dongbin.testy;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.octo.captcha.service.CaptchaServiceException;
    
    
    public class VerifyCodeServlet extends HttpServlet {
    
        
        private static final long serialVersionUID = 1L;
        
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            this.doGet(req, resp);
        }
        
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {        
            boolean b = false;  
            
            String codeValue =request.getParameter("j_captcha_response");        
            
           
            try {
                b = CaptchaServiceSingleton.getInstance().validateResponseForID(request.getSession().getId(), codeValue.toLowerCase());
            } catch (CaptchaServiceException e) {
                e.printStackTrace();
            }
            
      
            response.setContentType("text/html;charset=utf-8");  
            PrintWriter out = response.getWriter();  
            out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");  
            out.println("<HTML>");  
            out.println("  <HEAD><TITLE>验证结果:</TITLE></HEAD>");  
            out.println("  <BODY>");  
            if(b == Boolean.TRUE){  
                out.print("验证通过!");  
            }else {  
                out.print("验证失败!");  
            }  
            out.println("  </BODY>");  
            out.println("</HTML>");  
            out.flush();  
            out.close();  
      
        }
    
    }


  • 相关阅读:
    mysql 实现 start with
    [URLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]
    163邮箱报错WARN: 535 Error: authentication failed.
    iOS开发SDWebImageOptions理解
    Core Graphices 设置渐变
    iOS 解压Assets.car文件
    Core Graphices 获取上下文
    2019春第五周作业
    2019年春季学期第4周作业.
    2019年春季学期第4周作业
  • 原文地址:https://www.cnblogs.com/b-dong/p/5792882.html
Copyright © 2020-2023  润新知