• java生成验证码


    jsp层:利用img标签的src请求后台,得到验证码图片,每次点击换一张的时候,就可以从后天重新获得新的验证码图片

            $("#changeImg").on("click",function(){
                 var imgSrc = $("#imgObj");
                 var src = imgSrc.attr("src");
                 //alert(src);          
                imgSrc.attr("src",chgUrl(src));
              });

        //给URL加一个时间戳
             function chgUrl(url) {
                var timestamp = (new Date()).valueOf();
                url = url.substring(0, 46);
                if ((url.indexOf("&") >= 0)) {
                    url = url + "?tamp=" + timestamp;
                } else {
                    url = url + "?timestamp=" + timestamp;
                }
                return url;
           }
           //判断用户输入验证码是否正确      
           $("#inputCode").on("focusout",function(){
                    $.ajax({
                      url:"${basePath}pb_valiDateCode.action",
                     type:"post",
                     success:function(data){
                         if(data.msg="success"){
                             //alert("data.code"+data.code);
                             var value = $("#inputCode").val();
                             //alert("value"+value);
                             if(value != data.code){
                                $("#fontId").empty();                        
                                $("#fontId").html("你输入的验证码不正确!");
                                $("#fontId").css("color", "red");
                                   }else{
                                    $("#fontId").empty();
                                   }
                               }                  
                         },
                     error:function(){
                         alert("网络故障");
                              }
                      }        
                  );    
           });    
        });

    验证码:
     <input id="inputCode" name="code" type="text" height="10px" width="10px" />
     <img id="imgObj" alt="验证码" src="${basePath }pb_getCode.action" />
     <a id="changeImg" href="#">换一张</a>
     <font id="fontId"></font>

    后台Action层方法:

      /**
       * 向前台输出验证码
       * @return
       */
     public String getCode(){
            HttpServletRequest request = ServletActionContext.getRequest();
            HttpServletResponse response = ServletActionContext.getResponse();     
            petitionBusinessService.getCode(request,response);      
            return null;    
       }

       /**
         * 异步校验用户输入的验证码是否正确,返回json
         */
        public String valiDateCode(){
            HttpServletRequest request = ServletActionContext.getRequest();
            HttpSession session = request.getSession();
            String code = (String) session.getAttribute("code");
            dataMap= new HashMap<String, Object>();
            dataMap.put("msg", "success");
            dataMap.put("code", code);
            return "dataMapData";
          }
    后台Sevice层方法

        public void getCode(HttpServletRequest request, HttpServletResponse response) {
            int width = 90;// 定义图片的width
            int height = 20;// 定义图片的height
            int codeCount = 4;// 定义图片上显示验证码的个数
            int xx = 15;
            int fontHeight = 18;
            int codeY = 16;
            char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
                    'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
                    'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6',
                    '7', '8', '9' };
            // 定义图像buffer
            BufferedImage buffImg = new BufferedImage(width, height,
                    BufferedImage.TYPE_INT_RGB);
            Graphics gd = buffImg.getGraphics();
            // 创建一个随机数生成器类
            Random random = new Random();
            // 将图像填充为白色
            gd.setColor(Color.WHITE);
            gd.fillRect(0, 0, width, height);
            // 创建字体,字体的大小应该根据图片的高度来定。
            Font font = new Font("Fixedsys", Font.BOLD, fontHeight);
            // 设置字体。
            gd.setFont(font);
            // 画边框。
            gd.setColor(Color.BLACK);
            gd.drawRect(0, 0, width - 1, height - 1);
            // 随机产生40条干扰线,使图象中的认证码不易被其它程序探测到。
            gd.setColor(Color.BLACK);
            for (int i = 0; i < 40; i++) {
                int x = random.nextInt(width);
                int y = random.nextInt(height);
                int xl = random.nextInt(12);
                int yl = random.nextInt(12);
                gd.drawLine(x, y, x + xl, y + yl);
            }
            // randomCode用于保存随机产生的验证码,以便用户登录后进行验证。
            StringBuffer randomCode = new StringBuffer();
            int red = 0, green = 0, blue = 0;
            // 随机产生codeCount数字的验证码。
            for (int i = 0; i < codeCount; i++) {
                // 得到随机产生的验证码数字。
                String code = String.valueOf(codeSequence[random.nextInt(36)]);
                // 产生随机的颜色分量来构造颜色值,这样输出的每位数字的颜色值都将不同。
                red = random.nextInt(255);
                green = random.nextInt(255);
                blue = random.nextInt(255);
                // 用随机产生的颜色将验证码绘制到图像中。
                gd.setColor(new Color(red, green, blue));
                gd.drawString(code, (i + 1) * xx, codeY);
                // 将产生的四个随机数组合在一起。
                randomCode.append(code);
            }
            // 将四位数字的验证码保存到Session中。
            HttpSession session = request.getSession();
            // 打印生成的验证码
            System.out.print(randomCode);
            session.setAttribute("code", randomCode.toString());
            // 禁止图像缓存。
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Cache-Control", "no-cache");
            response.setDateHeader("Expires", 0);
            response.setContentType("image/jpeg");
            // 将图像输出到Servlet输出流中。
            ServletOutputStream sos;
            try {
                sos = response.getOutputStream();
                ImageIO.write(buffImg, "jpeg", sos);
                sos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } 

  • 相关阅读:
    快速排序算法图文详解(模版使用)
    数据库中事务和隔离级别解析
    详解对象的创建,布局,定位,存活判断
    SpringCloud-Ribbon:认识并配置负载均衡
    SpringCloud-Feign:接口式微服务调用
    SpringCloud-Eureka(3)集群配置和了解CAP原则
    SpringCloud-Eureka(2)服务注册与信息配置
    SpringCloud-Eureka(1)认识Eureka和初步配置
    Promise
    es6
  • 原文地址:https://www.cnblogs.com/520playboy/p/5301886.html
Copyright © 2020-2023  润新知