• java验证码


    jsp页面====

    <tr>
    <td align="right"> </td>
    <td>
    <img class="verifyCode" onclick="changeCode()" src="getVerifyCode" style="height:35px;">
    </td>
    </tr>
    <tr>
    <td align="right"></td>
    <td><input class="verifyCode" name="verifyCode" placeholder="请输入验证码"> </td>
    </tr>

    /*初始化验证码*/
    $(function(){
    var src = "<%=basePath%>code/getVerifyCode?"+new Date().getTime(); //加时间戳,防止浏览器利用缓存
    $('.verifyCode').attr("src",src); //jQuery写法

    })
    /*点击刷新验证码*/
    function changeCode(){
    var src = "<%=basePath%>code/getVerifyCode?"+new Date().getTime(); //加时间戳,防止浏览器利用缓存
    $('.verifyCode').attr("src",src); //jQuery写法

    }

    后台代码=============

    package controller.user;

    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.io.OutputStream;

    import javax.imageio.ImageIO;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;

    import utile.VerifyCodeUtils;

    @Controller
    @RequestMapping("/code")
    public class VerifyCodeController {
    /* 获取验证码图片*/
    @RequestMapping("/getVerifyCode ")

    public void getVerificationCode(HttpServletResponse response,HttpServletRequest request) {

    try {
    int width=200;
    int height=69;
    BufferedImage verifyImg=new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    //生成对应宽高的初始图片
    String randomText = VerifyCodeUtils.drawRandomText(width,height,verifyImg);
    System.out.println("验证码内容randomText===="+randomText);
    //单独的一个类方法,出于代码复用考虑,进行了封装。
    //功能是生成验证码字符并加上噪点,干扰线,返回值为验证码字符
    request.getSession().setAttribute("verifyCode", randomText);
    response.setContentType("image/png");//必须设置响应内容类型为图片,否则前台不识别
    OutputStream os = response.getOutputStream(); //获取文件输出流
    ImageIO.write(verifyImg,"png",os);//输出图片流
    os.flush();
    os.close();//关闭流
    } catch (IOException e) {
    e.printStackTrace();

    }

    }


    }

    package utile;

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.util.Random;
    /**
    * 验证码
    */
    public class VerifyCodeUtils{

    public static String drawRandomText(int width,int height,BufferedImage verifyImg) {
    Graphics2D graphics = (Graphics2D)verifyImg.getGraphics();
    graphics.setColor(Color.WHITE);//设置画笔颜色-验证码背景色
    graphics.fillRect(0, 0, width, height);//填充背景
    graphics.setFont(new Font("微软雅黑", Font.BOLD, 40));
    //数字和字母的组合
    String baseNumLetter= "123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ";
    StringBuffer sBuffer = new StringBuffer();
    int x = 10; //旋转原点的 x 坐标
    String ch = "";
    Random random = new Random();
    for(int i = 0;i <4;i++){
    graphics.setColor(getRandomColor());
    //设置字体旋转角度
    int degree = random.nextInt() % 30; //角度小于30度
    int dot = random.nextInt(baseNumLetter.length());
    ch = baseNumLetter.charAt(dot) + "";
    sBuffer.append(ch);
    //正向旋转
    graphics.rotate(degree * Math.PI / 180, x, 45);
    graphics.drawString(ch, x, 45);
    //反向旋转
    graphics.rotate(-degree * Math.PI / 180, x, 45);
    x += 48;
    }
    //画干扰线
    for (int i = 0; i <6; i++) {
    // 设置随机颜色
    graphics.setColor(getRandomColor());
    // 随机画线
    graphics.drawLine(random.nextInt(width), random.nextInt(height),
    random.nextInt(width), random.nextInt(height));
    }
    //添加噪点
    for(int i=0;i<30;i++){
    int x1 = random.nextInt(width);
    int y1 = random.nextInt(height);
    graphics.setColor(getRandomColor());
    graphics.fillRect(x1, y1, 2,2);
    }
    return sBuffer.toString();
    }

    /**
    * 随机取色
    */
    private static Color getRandomColor() {
    Random ran = new Random();
    Color color = new Color(ran.nextInt(256),
    ran.nextInt(256), ran.nextInt(256));
    return color;
    }

    }

  • 相关阅读:
    汇编学习--第十天
    linux(03)基础系统优化
    linux(02)基础shell命令
    lf 前后端分离 (6) 支付
    lf 前后端分离 (5) 优惠券
    lf 前后端分离 (4) 价格策略
    lf 前后端分离 (3) 中间建跨域
    lf 前后端分离 (2) 课程数据获取,Serializer的返回
    lf 前后端分离 (1) auth,token认证
    支付宝接口调用总结(1)
  • 原文地址:https://www.cnblogs.com/xianz666/p/12006469.html
Copyright © 2020-2023  润新知