java生成验证码,且前台进行调用展示

Java生成图片验证码并在Vue页面上展示 文章目录需求实现 需求 最近做的一个管理后台项目中,手机号登录是需要发送手机验证码的,然后需求方提出想要一个前台的图片验证码,只有输入正确后才可发送手机验证码。很简单很普通的一个需求但是实际做的时候,碰到了一个小坑,其他人有很多都没说出这点,千篇一律的。特此记录。 实现 图片的生成实现,这个部分网上已经有很多例子了,各种各样的实现方案和结果,大家找一个改改就应该可以了。 /** * Captcha * 图形验证码 * * @author rysis * @version 1.00 * @Date 阅读详情

工具类,生成验证码

package cn.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

import javax.imageio.ImageIO;

公共类SecurityCode {
	private static int width = 90; //定义图片的宽度
	private static int height = 20; //定义图片的高度
	private static int codeCount = 4; //定义图片上显示验证码的个数
	private static int xx = 15;
	private static int fontHeight = 18;
	private static int codeY = 16;
	private static 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' };

	/**
	 * 生成一个map集合 code为生成的验证码 codePic为生成的验证码BufferedImage对象
	 * 
	 * @return
	 */
	public static Map<String, Object> generateCodeAndPic() {
		// 定义图像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 < 30; 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用于保存随机产生的验证码,以便用户登录后进行验证。
		String randomCode = new String();
		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 = randomCode + code;
		}
		Map<String, Object> map = new HashMap<String, Object>();
		// 存放验证码
		map.put("code", randomCode);
		// 存放生成的验证码BufferedImage对象
		map.put("codePic", buffImg);
		return map;
	}

	public static void main(String[] args) throws Exception {
		// 创建文件输出流对象
		File file = new File("D://img/" + System.currentTimeMillis() + ".jpg");
		if (!file.exists()) {
			file.createNewFile();
		}
		OutputStream out = new FileOutputStream(file);
		Map<String, Object> map = SecurityCode.generateCodeAndPic();
		ImageIO.write((RenderedImage) map.get("codePic"), "jpeg", out);
	}
}

controller类调用

@RequestMapping("/getSecurityCode")
	public void getSecurityCode(HttpServletResponse response, HttpSession session) throws Exception {
		Map map = SecurityCode.generateCodeAndPic();
		ServletOutputStream out = response.getOutputStream();
		BufferedImage img = (BufferedImage) map.get("codePic");
		String securityCode = (String) map.get("code");
		session.setAttribute("securityCode", securityCode);
		ImageIO.write(img, "jpg", response.getOutputStream());
	}

前台页面要注意

调用controller需要加一个随机数,否则浏览器可能会缓存这个验证码,导致点击刷新,但是验证码不变的情况

<img style="margin: 0 0 0 3px; vertical-align: middle; height: 26px;"
				src="${pageContext.request.contextPath }/getSecurityCode" title="换一张"
				onclick="this.src='${pageContext.request.contextPath }/getSecurityCode?'+Math.random()"
				/>

显示效果


Java以ajax方式获取后台生成验证码后台验证 通过ajax方式从后台获取验证码,并且通过ajax方式进行后台验证,提高验证码的安全性。 立即下载

相关推荐

Java后端产生验证码后台验证功能的实现代码

主要介绍了Java后台产生验证码后台验证功能,本文文字结合实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

java中如何生成验证码返回给前端

weixin_49624018的博客 635

VS2022离线安装总闪退?可能是这个--noWeb参数没加对(完整参数指南)

本文深入解析了VS2022离线安装过程中常见的闪退问题,指出核心原因往往在于命令行参数使用不当,特别是`--noWeb`参数。文章提供了完整的参数使用指南和实战解决方案,包括证书处理、安装器文件修复及自动化脚本,帮助用户彻底解决离线部署中的验证失败与闪退难题。

weixin_28842269的博客 761

Java实现后台产生验证码前台检测登录

话不多说,直接上代码: package com.ioe.utils; import java.awt.*; import java.awt.image.BufferedImage; import java.util.Random; /** * <h3>TestService</h3> * <p>生成验证码工具</p> * * @autho...

weixin_43734184的博客 819

Megatron单机多卡Qwen2.5:pre-train+sft

英伟达:https://github.com/NVIDIA/Megatron-LM/releases/tag/core_r0.8.0阿里:https://github.com/alibaba/Pai-Megatron-Patch/releases/tag/v0.10.2。

weixin_46873015的博客 2180

Qt Tab Widget 实战:如何打造一个可动态增删的标签页管理器(附完整代码)

本文深入探讨了使用Qt框架中的Tab Widget控件构建动态标签页管理器的实战方法。通过分析动态增删的核心挑战,提供了完整的C++代码示例,涵盖信号槽机制、页面生命周期管理、上下文菜单实现以及状态持久化等关键功能,帮助开发者打造高效、用户友好的桌面应用界面。

bb456的博客 1047

java调用阿里云实现短信验证码(存储到redis中)

改一下这里面的就OKjava调用阿里云实现短信验证码 controller层 package com.jwt.demo.controller; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import or

重生之我不会写代码 788

AI变现案例实战系列4:AI数字员工团队——用OpenClaw搭建6个智能体,自动运营你的赚钱系统

摘要:谷歌AI产品经理Shubham Saboo利用OpenClaw搭建6人AI团队,实现内容创作、技术开发等任务自动化,每月成本不足400美元。文章对比阿里云和Windows本地两种部署方案,提供详细配置指南。通过多Agent架构实现物理隔离与精准协作,可创建6个专业AI角色(如研究员、运营、工程师等),每个Agent专注单一任务,避免记忆负担和上下文污染问题。阿里云方案适合长期稳定运行,Windows本地部署则适合零成本测试。最终可组建高效AI团队,实现7x24小时无人值守运营。(149字)

小明的博客 1141

实现图片验证码

web.xml: &lt;servlet&gt;   &lt;description&gt;This is the description of my J2EE component&lt;/description&gt;   &lt;display-name&gt;This is the display name of my J2EE component&lt;/...

ABoLuoTaMei的专栏 209

CODESYS连接触摸屏

触摸屏:威纶通-MT8071iP(网络IP:192.168.1.10) 控制器:研华AMAX-5580(PAC)(Win10系统,网络IP:192.168.1.3) CODESYS RTE:RTE 64 V3.5 SP13 Build05 笔记本:Thinkpad L14(网络IP:192.168.1.2) CODESYS IDE:V3.5 SP13(ADD ON V3.5.13.5) 一、确认网络通讯正常(关闭防火墙) 笔记本与触摸屏网络测试情况 笔记本与控制器网络测试情况 二、控制器部分 1、新建

Leo的博客 1万+

杰理-tone

低音质格式切换高音质格式:切换提示音格式,未导出,编译下载没有提示音;提示音导出,再次编译下载,提示音正常高音质格式切换低音质格式:不需要导出,直接编译下载,提示音正常。

m0_67447112的博客 955

验证码工具之Kaptcha

验证码的作用 防止恶意破解密码、刷票、论坛灌水、刷页。 有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试,实际上使用验证码是现在很多网站通行的方式(比如招商银行的网上个人银行,百度社区),我们利用比较简易的方式实现了这个功能。虽然登录麻烦一点,但是对网友的密码安全来说这个功能还是很有必要,也很重要。但我们还是 提醒大家要保护好自己的密码 ,尽量使用混杂了数字、字母、...

qq_41665121的博客 825

基于DO-178C/331的飞控软件研发环境的研究

本研究提出了一套基于DO-178C/331标准的飞控系统软件开发和验证框架。通过优化模型库的设计、代码生成配置和测试验证流程,显著提升了飞控系统软件的开发效率和安全性。未来的研究可以进一步扩展模型库的功能,以适应更复杂的飞控系统需求。

qq_41854911的博客 563

后台java 实现验证码生成

后台实现验证码生成   效果图如下: 1.适用需求 后台生成验证码,用于登陆验证。   2. 功能实现所需控件/文件: 无(普通标签)   3.功能点实现思路 1)前台思路: (1)前台一个&lt;input&gt;用于输入验证码;一个&lt;img&gt;用于展示验证码。 (2)验证码生成以及展示,点击刷新功能,可以为&lt;img&gt;绑定click事件。 (3...

LonelySnow的博客 5万+

WCK Operation (WCK 操作)

LPDDR6 SDRAM采用双时钟系统(WCK和CK),其中WCK频率是CK的两倍。为确保数据正确传输,需通过WCK2CK同步操作使两种时钟对齐。LPDDR6支持两种同步模式:Auto-sync off模式和WCK Always on模式,可通过MR22寄存器选择。同步操作由特定命令(Read/Write/MRR等)触发,需在满足特定时序参数(如tWCKENL、tWCKPRE等)后完成。同步前必须完成WCK2CK训练,且不同操作(读取/写入/CAS)有各自的时序要求。该机制确保数据在正确时钟相位下传输,是L

李家小院 657

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java后台随机验证码的生成及前台html展示

        今天项目中使用到了随机验证码,使用的过程中遇见了一点点小坑,特此记录一下,方便以后使用。        后台生成图片后可使用输出流也可以使用base64的方式传至前台展示,以下是代码。 第一种:使用流的方式        前台代码: &lt;img id="imgObj" src="项目地址/getPicStream" onclick="reloadcode()" /&gt; fu...

baidu_32861867的博客 2234

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

java后端生成图形验证码、前端接收并展示

1 工具类 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.awt.image.Buf...

qq_25598453的博客 8349

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java 生成 验证码图片

如何用JAVA生成随机验证码图片

刘伟佳的博客 9374

java生成验证码登录,生成验证码

这里写了一个生成验证码的demo 前台可以访问该servlet页面显示验证码 验证码 后台存的session名称为vCode 判断验证码是否正确时可以直接调用 前台通过 这里你就自己引入jq吧 <img src="ValidateCodeServle" id="src"> <a onclick="code()">看不清楚,换一张</a> <script...

不负好时光的博客 1109

java 验证码图片生成

/ 注意这里的参数顺序,先是图像,然后是格式,最后是输出流。// 在实际应用中,应该使用更合适的错误处理机制。// 确保你有一个Random实例可用。// 释放Graphics资源。// 将验证码字符串保存到会话中以便后续验证。// 生成随机验证码字符串。// 绘制验证码字符串。// 设置背景色并填充整个图像。// 将图像写入响应输出流。结果仅仅是权限的问题!

m0_73089490的博客 1261

java生成验证码展示给前端

这是一个Java Web学习项目,展示了Servlet基础和HTTP响应处理的核心功能。项目结构清晰,包含源码目录、Web资源和构建输出。主要实现了以下功能:1)Servlet基础结构演示;2)响应处理(重定向和请求转发);3)验证码生成功能,使用随机字符和干扰线增强安全性;4)多个交互页面实现。技术栈基于Java Servlet,采用MVC模式分离业务逻辑与展示层。项目特别演示了验证码生成(通过BufferedImage绘制随机字符)、重定向(sendRedirect)和请求转发(setAttribute

~ 843

JAVA生成图形验证码并返回给前台,SpringBoot+vue

JAVA生成图形验证码并返回给前台,SpringBoot+vue @GetMapping("/createCaptchaImage") public ResultModel getCode(HttpServletResponse response) throws IOException { // 生成随机字串 String verifyCode = VerifyCodeUtils.generateVerifyCode(4); // 唯一标识 String uuid = .

weixin_37999518的博客 1159

前台页面验证码如何生成

验证码:就是将一串随机产生的数字或符号,生成一幅图片, 图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。 验证码作用: 一般是防止有人利用机器人自动批量注册、对特定的注册用户用特定程序暴力破解方式进行不断的登陆、灌水。因为验证码是一个混合了数字或符号的图片,人眼看起来都费劲,机器识别起来就更困难。像百度贴吧未登录发贴要

Angle_Saber的博客 766

后端生成验证码

1.功能点实现思路 1)前台思路: (1)前台一个用于输入验证码;一个用于展示验证码。 (2)验证码生成以及展示,点击刷新功能,可以为绑定click事件。 (3)click事件里面写ajax请求,通过后台生成处理好的带噪点的验证码图片。 注意:后台直接返回图片,不是验证码的字符!若返回字符,则验证码就失去了意义(前台很容易就可以获取验证码字符,进行多次恶意访问了)(这点考虑了系统安全性) (4)关于返回的图片如何在标签内展示 直接利用img的src属性,属性值为后台生成验证码的方法请求路径即可。当点击验证码

workhard2的博客 2714

java 实现生成验证码并在页面展示

第一步创建一个工具类(util) /** * @Description: 用于生成前端验证码 * @Param: width:宽度 * @Param: height 高度 * @Param: codeLength 验证码长度 * @return: 返回验证码以及图片流 * @Author: Dingmingming * @Date: 19...

人的生命周期还还没有代码的生命周期精彩 1211
上一篇: 数据库存储图片,且前台从后台拿到图片进行展示
下一篇: 使用java实现语音播报
Yuwen_forJava
博客等级 码龄9年 28粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值