Java使用 BufferedImage生成验证码图片简单使用Java生成验证码 使用Java生成验证码图片 java生成验证码图片

Java使用 BufferedImage生成验证码图片简单使用Java生成验证码 使用Java生成验证码图片 java生成验证码图片

  • 1、工具类
  • 2、调用

1、工具类

import org.apache.xmlbeans.impl.util.Base64;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;import javax.imageio.ImageIO;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.UUID;public class CaptchaGenerator {private static Logger log = LoggerFactory.getLogger(CaptchaGenerator.class);// 图像宽度private static final int WIDTH = 100;// 图像高度private static final int HEIGHT = 35;// 验证码字符集合private static final String CHARACTERS = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";// 字符随机颜色private static Color getColor(Random random) {return new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));}// 生成验证码,使用 response直接输出图片,也可以返回base64图片public static void generate(HttpServletRequest request, HttpServletResponse response) throws Exception {try {BufferedImage image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);Graphics g = image.getGraphics();//设置背景颜色g.setColor(Color.PINK);g.fillRect(0,0,WIDTH,HEIGHT);Random random = new Random();StringBuilder captchaText = new StringBuilder();for (int i = 0; i < 4; ++i) {char c = CHARACTERS.charAt(random.nextInt(CHARACTERS.length()));captchaText.append(c);Font font = new Font("Arial", Font.BOLD, 20);Color color = getColor(random);g.setFont(font);// 设置字符颜色g.setColor(color);g.drawString(Character.toString(c), 20 * i + 10, 20);}// 如果使用 ip + 缓存来存储验证码,那么不需要 HttpSession,看个人具体实现HttpSession session = request.getSession();session.removeAttribute("captcha");session.setAttribute("captcha",captchaText.toString());log.info("==== CaptchaGenerator session id==========:{}",session.getId());g.dispose();log.info("====generate Captcha============" + captchaText);log.info("====generate Captcha sesstion captcha============" + session.getAttribute("captcha"));ServletOutputStream responseOutputStream =response.getOutputStream();ImageIO.write(image, "png", responseOutputStream);// 直接 response输出responseOutputStream.flush();responseOutputStream.close();// 转为base64图片// ByteArrayOutputStream baos = new ByteArrayOutputStream();// byte[] imageBytes = baos.toByteArray();// 关闭 ByteArrayOutputStream// baos.close();// 将 byte 数组转换为 Base64 字符串// String base64Image = java.util.Base64.getEncoder().encodeToString(imageBytes);// 打印 Base64 字符串// System.out.println(base64Image);} catch (Exception e) {e.printStackTrace();throw new Exception(e.getMessage());}}}

2、调用

	@RequestMapping(value="/loginCaptcha",method=RequestMethod.GET)public void loginCaptcha(HttpServletRequest request, HttpServletResponse response) throws Exception {CaptchaGenerator.generate(request,response);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/44725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何将一个2D数组切分成多个块

要将一个2D数组切分成多个块&#xff0c;可以考虑使用以下几种方法&#xff0c;具体取决于如何定义块的划分规则和需求。如果你希望将2D数组均匀地切分成固定大小的小块&#xff0c;可以使用简单的循环和切片操作。 1、问题背景 Python 中, 如果有一个 raw 数据文件&#xff0…

SSM社区物业管理系统-计算机毕业设计源码91276

摘要 随着城市化进程的加快&#xff0c;居民社区的规模和数量不断增长&#xff0c;传统的人工管理方式已经无法满足管理需求。借助信息技术和互联网应用&#xff0c;社区物业管理系统可以实现物业管理信息的集中化、自动化和便捷化&#xff0c;提供全方位的管理和服务支持。社区…

使用kubeadm重置k8s集群

1.Master 节点和Work节点都需要执行&#xff1a;kubeadm reset kubeadm reset -hAvailable Commands:alpha Kubeadm experimental sub-commandscompletion Output shell completion code for the specified shell (bash or zsh)config Manage configuration for a…

智慧水利的变革之路:如何通过大数据、物联网和人工智能构建高效、智能、可持续的水利管理新模式

目录 一、引言&#xff1a;智慧水利的时代背景与意义 二、大数据&#xff1a;水利管理的数据基石 &#xff08;一&#xff09;数据收集与整合 &#xff08;二&#xff09;数据分析与挖掘 三、物联网&#xff1a;水利管理的感知神经 &#xff08;一&#xff09;智能感知与监…

ONLYOFFICE 8.1版本版本桌面编辑器测评

ONLYOFFICE官网链接&#xff1a;ONLYOFFICE - 企业在线办公应用软件 | ONLYOFFICE ONLYOFFICE在线办公套件&#xff1a;在线办公套件 | ONLYOFFICE ONLYOFFICE在线PDF编辑器、阅读器和转换器&#xff1a;在线PDF查看器和转换器 | ONLYOFFICE ONLYOFFICE 8.1版本桌面编辑器是…

Java面试之缓存中间件常见面试题

1. 请简述什么是缓存以及为什么需要使用缓存&#xff1f; 缓存是存储常用或临时数据的组件&#xff0c;用于提高数据访问速度。在Web应用中&#xff0c;缓存能够减少数据库访问次数&#xff0c;提高系统响应速度和吞吐量&#xff0c;从而提升用户体验和系统稳定性。 2. 列举一…

开源可视化Flutter图表库:Graphic

Graphic&#xff1a;用Graphic绘制数据的无限可能- 精选真开源&#xff0c;释放新价值。 概览 Graphic&#xff0c;这个基于Flutter的图表库&#xff0c;以其源自《The Grammar of Graphics》的灵感&#xff0c;为数据可视化提供了一种全新的方法。它不仅仅是一个工具&#xf…

【Pytorch】RNN for Image Classification

文章目录 1 RNN 的定义2 RNN 输入 input, h_03 RNN 输出 output, h_n4 多层5 小试牛刀 学习参考来自 pytorch中nn.RNN()总结RNN for Image Classification(RNN图片分类–MNIST数据集)pytorch使用-nn.RNNBuilding RNNs is Fun with PyTorch and Google Colab 1 RNN 的定义 nn.…

【ECCV 2024】首个跨模态步态识别框架:Camera-LiDAR Cross-modality Gait Recognition

【ECCV 2024】首个跨模态步态识别框架&#xff1a;Camera-LiDAR Cross-modality Gait Recognition 简介&#xff1a;主要方法&#xff1a;实验结果&#xff1a; 论文&#xff1a;https://arxiv.org/abs/2407.02038 简介&#xff1a; 步态识别是一种重要的生物特征识别技术。基…

算法力扣刷题记录 四十一【N叉树遍历】

前言 依然是遍历问题。由二叉树扩展到N叉树遍历。 记录 四十一【N叉树遍历】 一、【589. N叉树的前序遍历】 题目 给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔…

解锁SQL Server的迷宫:深入死锁的诊断与解决之道

解锁SQL Server的迷宫&#xff1a;深入死锁的诊断与解决之道 在数据库的世界中&#xff0c;死锁是一种常见的现象&#xff0c;它发生在两个或多个事务在访问资源时相互等待对方释放锁&#xff0c;从而导致无法继续执行的情况。SQL Server作为一种广泛使用的数据库管理系统&…

第十八章 Express multer 文件上传

本章将学习Express multer 文件上传 &#xff0c;因为Nest 的文件上传是基于 Express 的中间件 multer 实现的&#xff0c;所以在学习 Nest 文件上传之前&#xff0c;我们先学习下 multer 包 首先先创建 multer-test 文件夹执行下面代码 创建package.json npm init -y接着安装…

深入浅出 Spring @Async 异步编程的艺术

目录 一、异步编程 二、Async 介绍 2.1 Async 使用 三、Async 原理 一、异步编程 在软件开发中&#xff0c;异步编程是非常关键的&#xff0c;尤其是构建高性能、高响应度的应用时。异步编程的主要优势在于它能够避免阻塞操作&#xff0c;提高程序的效率和用户体验。异步编…

修BUG:程序包javax.servlet.http不存在

貌似昨晚上并没有成功在tomcat上面运行&#xff0c;而是直接运行了网页。 不知道为啥又报错这个。。。 解决方案&#xff1a; https://developer.baidu.com/article/details/2768022 就整了这一步就行了 而且我本地就有这个tomcat就是加进去了。 所以说啊&#xff0c;是不是&a…

eNSP公司管理的对象及策略

拓扑图[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 ) 实验需求 第一步&#xff1a;根据题目搭建拓扑图 其中交换机的型号为&#xff1a;S5700 防火墙设备为&#xff1a;USG6000V 第二步&#xff1a;启动防火墙设备 首先会让你输入密码&#xff0c;…

SQL MySQL定时器/事件调度器(Event Scheduler)

事件调度器&#xff08;Event Scheduler&#xff09;在MySQL数据库系统中是一个强大的功能组件&#xff0c;它允许用户定义一系列称为“事件”的数据库对象&#xff0c;这些事件在指定的时间或时间间隔自动执行预定义的SQL语句或操作。事件调度器通过维护一个时间计划表来管理这…

小抄 20240709

1 很多人做事&#xff0c;没有目标&#xff0c;没有主见&#xff0c;只是按照别人的指示去做&#xff0c;完全不清楚为什么去做。 你去问他为什么要做&#xff0c;他反而要和你急眼&#xff0c;觉得你在质疑他。 2 想要获得超出预期的成功&#xff0c;不是努力到极致&#x…

npm install报错:淘宝镜像证书过期

npm install报错&#xff1a;淘宝镜像证书过期 近期使用npm淘宝镜像新建项目或依赖时出现报错&#xff1a; npm ERR! request to https://registry.npm.taobao.org/xxx failed, reason: certificate has expired 错误原因&#xff1a; 早在 2021 年&#xff0c;淘宝就发文称…

【MySQL】常见的MySQL日志都有什么用?

MySQL日志的内容非常重要&#xff0c;面试中经常会被问到。同时&#xff0c;掌握日志相关的知识也有利于我们理解MySQL 底层原理&#xff0c;必要时帮助我们排查解决问题。 MySQL中常见的日志类型主要有下面几类(针对的是InnoDB 存储引擎): 错误日志(error log):对 MySQL 的启…

QScrollArea 设置最大的高度值

在 Qt 中&#xff0c;QScrollArea 是一个提供滚动视图的控件&#xff0c;允许用户查看大于当前视口尺寸的内容。如果你想要为 QScrollArea 设置一个最大的高度值&#xff0c;这通常不是直接通过 QScrollArea 的属性来设置的&#xff0c;而是需要调整其内容部件&#xff08;widg…