zoukankan      html  css  js  c++  java
  • 使用jsp生成验证码

    在开发中验证码是比较常用到有效防止这种问题对某一个特定注册用户用特定程序暴力破解方式进行不断的登陆尝试的方式。
    此演示程序包括三个文件:
    1.index.jsp:登录页面
    2.image.jsp:生成验证码图片页面
    3.result.jsp:结果页面
    【页面代码】
    1.index.jsp
    <html>
    <body>      
    <form method=post action="result.jsp">      
    <input type=text name=input maxlength=4>      
    <img border=0 src="image.jsp">      
    <input type="submit" value="submit">      
    </form>
    </body>
    </html>  
    (1)使用maxlength属性来限制输入字符;
    (2)使用<img>标签来显示生成的验证码图片.
     
     2.image.jsp
    <%@ page language="java" import="java.util.*" %>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <%@ page contentType="image/JPEG"  
        import="java.awt.*,java.awt.image.*,java.util.*,javax.imageio.*"  
        pageEncoding="GBK"%> 
    <%!Color getRandColor(int fc, int bc) {//给定范围获得随机颜色   
            Random random = new Random();   
            if (fc > 255)   
                fc = 255;   
            if (bc > 255)   
                bc = 255;   
            int r = fc + random.nextInt(bc - fc);   
            int g = fc + random.nextInt(bc - fc);   
            int b = fc + random.nextInt(bc - fc);   
            return new Color(r, g, b);   
        }%>  
      <%   
        //设置页面不缓存   
        response.setHeader("Pragma", "No-cache");   
        response.setHeader("Cache-Control", "no-cache");   
        response.setDateHeader("Expires", 0);   
      
        // 在内存中创建图象   
        int width = 60, height = 20;   
        BufferedImage image = new BufferedImage(width, height,   
                BufferedImage.TYPE_INT_RGB);   
      
        // 获取图形上下文   
        Graphics g = image.getGraphics();   
      
        //生成随机类   
        Random random = new Random();   
      
        // 设定背景色   
        g.setColor(getRandColor(200, 250));   
        g.fillRect(0, 0, width, height);   
      
        //设定字体   
        g.setFont(new Font("Times New Roman", Font.PLAIN, 18));   
      
        //画边框   
        //g.setColor(new Color());   
        //g.drawRect(0,0,width-1,height-1);   
      
        // 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到   
        g.setColor(getRandColor(160, 200));   
        for (int i = 0; i < 100; i++) {   
            int x = random.nextInt(width);   
            int y = random.nextInt(height);   
            int xl = random.nextInt(12);   
            int yl = random.nextInt(12);   
            g.drawLine(x, y, x + xl, y + yl);   
        }   
      
        // 取随机产生的认证码(4位数字)   
        String sRand = "";   
        for (int i = 0; i < 4; i++) {   
            String rand = String.valueOf(random.nextInt(10));   
            sRand += rand;   
            // 将认证码显示到图象中   
            g.setColor(new Color(20 + random.nextInt(110), 20 + random   
            .nextInt(110), 20 + random.nextInt(110)));//调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成   
            g.drawString(rand, 13 * i + 6, 16);   
        }   
      
        // 将认证码存入SESSION   
        session.setAttribute("code", sRand);   
      
        // 图象生效   
        g.dispose();   
      
        // 输出图象到页面   
        ImageIO.write(image, "JPEG", response.getOutputStream());  
        out.clear(); 
        out=pageContext.pushBody();//这两行代码不加会产生异常
        
    %>   
    [注意]:
    (1)contentType值设置为"image/JPEG"
     
    3.result.jsp
     
     <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>  
    <html><body>  
    <%   
        String input=request.getParameter("input");   
        String code=(String)session.getAttribute("code");       
        if(input.equals(code)){   
            out.println("验证成功!");   
        }else{   
            out.println("验证失败!");   
        }   
    %>  
    body>html> 
  • 相关阅读:
    [.NET]如何擷取部分網頁內容轉成圖片
    一些很有用的JS特效
    Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
    .NET获取客户端信息
    WAYOS 破解版三天重启最新解决办法,免重启程序
    MySQL 随机生成各种类型的随机函数
    Active Form显示标题栏及页面跳转
    wayos计费系统easyradius使用小记
    ROS中的智能QOS实现,效果应该是会比WAYOS好,而且更灵活
    以太网中的ARP和PPPOE
  • 原文地址:https://www.cnblogs.com/yaopan007/p/3774661.html
Copyright © 2011-2022 走看看