Java 生成随机验证码图片的示例

 更新时间:2020年10月21日 11:08:38   作者:Marydon  
这篇文章主要介绍了Java 生成随机验证码图片的示例,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下

1.情景展示

  登录时,生成随机验证码图片,如何实现?    

2.原因分析

  后台生成验证码并生成图片返回至前台 

3.解决方案

  导包

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.RandomStringUtils;
import base.web.tools.WebUtils;

  获取验证码请求处理

/**
 * 获取验证码
 * @explain
 * @return 随机数图片
 */
public String getImage() {
    try {
        int width = 55;
        int height = 25;
        // 取得一个4位随机数字字符串
        String s = RandomStringUtils.randomNumeric(4);
        HttpServletResponse response = WebUtils.getResponse();
        // 存入cookie,用于与用户的输入进行比较
        Cookie cookie = new Cookie("validateCode", s);
        response.addCookie(cookie);
        response.setContentType("images/jpeg");
        response.setHeader("Cache-Control", "no-cache");
 
        ServletOutputStream out = response.getOutputStream();
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        // 设定背景色
        g.setColor(getRandColor(200, 250));
        g.fillRect(0, 0, width, height);
 
        // 设置字体
        Font mFont = new Font("宋体", Font.BOLD, 18);
        g.setFont(mFont);
 
        // 画边框
        // g.setColor(Color.BLACK);
        // g.drawRect(0, 0, width - 1, height - 1);
 
        // 生成随机类
        Random random = new Random();
        // 将认证码显示到图象中
        g.setColor(new Color(20 + random.nextInt(110), 20 + random.nextInt(110), 20 + random.nextInt(110)));
        // 将验证码画进图片
        g.drawString(s, 5, 20);
        // 图象生效
        g.dispose();
        // 输出图象到页面
        ImageIO.write((BufferedImage) image, "JPEG", out);
        out.flush();
        out.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
 
/**
 * 给定范围获得随机颜色
 * @explain
 * @param fc
 * @param bc
 * @return
 */
private Color getRandColor(int fc, int bc) {
    Random random = new Random();
    fc = (fc > 255) ? 255 : fc;
    bc = (bc > 255) ? 255 : bc;
    // 获取3次
    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);
}

  html片段

<img src="<c:url value="/getImage.do"/>" id="randomImage" style="cursor: pointer;vertical-align: bottom" height="35px" width="100px" onclick='sjs()' />  

  js片段

function sjs () {
    // 获取图片请求后面加一个随机参数,是为了避免同一个请求浏览器拒绝向服务器发送请求的问题(缓存)
    $("#randomImage")[0].src = baseUrl + "/getImage.do?s=" + Math.random();
};

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

本文作者:Marydon

原文链接:https://www.cnblogs.com/Marydon20170307/p/12807842.html

以上就是Java 生成随机验证码图片的示例的详细内容,更多关于Java 生成验证码的资料请关注脚本之家其它相关文章!

相关文章

  • java实现图形卡片排序游戏

    java实现图形卡片排序游戏

    这篇文章主要为大家详细介绍了java实现图形卡片排序游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • SpringMVC中的异常处理机制详解

    SpringMVC中的异常处理机制详解

    SpringMVC提供了基于xml和基于注解的异常处理机制,一般情况下两者都要进行配置,xml异常处理机制主要用于处理xml方式产生的异常,注解异常处理机制主要用于处理基于注解方式产生的异常,这篇文章主要介绍了SpringMVC中的异常处理机制,需要的朋友可以参考下
    2024-05-05
  • java开发中嵌套类的详解及实例

    java开发中嵌套类的详解及实例

    这篇文章主要介绍了 java开发中嵌套类的详解及实例的相关资料,一般把定义内部类的外围类成为包装类(enclosing class)或者外部类,需要的朋友可以参考下
    2017-07-07
  • 使用Java实现在Excel中创建下拉列表

    使用Java实现在Excel中创建下拉列表

    下拉列表(下拉框)可以确保用户仅从预先给定的选项中进行选择,这样不仅能减少数据输入错误,还能节省时间提高效率,下面我们就来看看如何在java中利用免费库实现创建下拉列表吧
    2024-03-03
  • Java.lang.NullPointerException的错误解决

    Java.lang.NullPointerException的错误解决

    Java中NullPointerException是一种常见的运行时异常,通常发生在尝试调用null对象的方法或访问其属性时,具有一定的参考价值,感兴趣的可以了解一下
    2024-09-09
  • Kafka之kafka-topics.sh的使用解读

    Kafka之kafka-topics.sh的使用解读

    这篇文章主要介绍了Kafka之kafka-topics.sh的使用解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • RabbitMQ 延迟队列实现订单支付结果异步阶梯性通知(实例代码)

    RabbitMQ 延迟队列实现订单支付结果异步阶梯性通知(实例代码)

    这篇文章主要介绍了RabbitMQ 延迟队列实现订单支付结果异步阶梯性通知,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • java教程之java程序编译运行图解(java程序运行)

    java教程之java程序编译运行图解(java程序运行)

    最近重新复习了一下java基础,在使用javap的过程中遇到了一些问题,这里便讲讲对于一个类文件如何编译、运行、反编译的。也让自己加深一下印象
    2014-03-03
  • springboot拦截器不拦截静态资源,只拦截controller的实现方法

    springboot拦截器不拦截静态资源,只拦截controller的实现方法

    这篇文章主要介绍了springboot拦截器不拦截静态资源,只拦截controller的实现方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • windows环境下java开发工具maven的安装教程图解

    windows环境下java开发工具maven的安装教程图解

    Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。这篇文章主要介绍了windows环境下java开发工具maven的安装,非常不错对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07

最新评论