千家信息网

Java怎么实现登录验证码保存到redis

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍"Java怎么实现登录验证码保存到redis",在日常操作中,相信很多人在Java怎么实现登录验证码保存到redis问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2026年11月03日Java怎么实现登录验证码保存到redis

这篇文章主要介绍"Java怎么实现登录验证码保存到redis",在日常操作中,相信很多人在Java怎么实现登录验证码保存到redis问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Java怎么实现登录验证码保存到redis"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

引入redis依赖



org.springframework.boot
spring-boot-starter-data-redis

验证码生成类

package com.yishang.yspay.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import java.awt.*;
import java.util.Random;

/**
* 验证码生成类
*/
public class RandomValidateCode {
public static final String RANDOMCODEKEY = "RANDOMVALIDATECODEKEY";//放到session中的key
//private String randString = "0123456789";//随机产生只有数字的字符串 private String
//private String randString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机产生只有字母的字符串
private String randString = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//随机产生数字与字母组合的字符串
private int width = 95;// 图片宽
private int height = 25;// 图片高
private int lineSize = 10;// 干扰线数量
private int stringNum = 4;// 随机产生字符数量

/**
* redis工具
*/
@Autowired
private RedisTemplate redisTemplate;

private Random random = new Random();

/*
* 获得字体
*/
private Font getFont() {
return new Font("Fixedsys", Font.CENTER_BASELINE, 24);
}

/*
* 获得颜色
*/
public Color getRandColor(int fc, int bc) {
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc - 16);
int g = fc + random.nextInt(bc - fc - 14);
int b = fc + random.nextInt(bc - fc - 18);
return new Color(r, g, b);
}

/*
* 绘制字符串
*/
public String drowString(Graphics g, String randomString, int i) {
g.setFont(getFont());
g.setColor(new Color(random.nextInt(101), random.nextInt(111), random
.nextInt(121)));
String rand = String.valueOf(getRandomString(random.nextInt(randString
.length())));
randomString += rand;
g.translate(random.nextInt(3), random.nextInt(3));
g.drawString(rand, 13 * i, 16);
return randomString;
}

/*
* 绘制干扰线
*/
public void drowLine(Graphics g) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(13);
int yl = random.nextInt(15);
g.drawLine(x, y, x + xl, y + yl);
}

/*
* 获取随机的字符
*/
public String getRandomString(int num) {
return String.valueOf(randString.charAt(num));
}
}

接口

@RequestMapping(value = "/getVerify")
public void getVerify(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("image/jpeg");//设置相应类型,告诉浏览器输出的内容为图片
response.setHeader("Pragma", "No-cache");//设置响应头信息,告诉浏览器不要缓存此内容
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expire", 0);

RandomValidateCode randomValidateCode = new RandomValidateCode();
// BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类
BufferedImage image = new BufferedImage(95, 25, BufferedImage.TYPE_INT_BGR);
Graphics g = image.getGraphics();// 产生Image对象的Graphics对象,改对象可以在图像上进行各种绘制操作
g.fillRect(0, 0, 95, 25);
g.setFont(new Font("Times New Roman", Font.ROMAN_BASELINE, 18));
g.setColor(randomValidateCode.getRandColor(110, 133));
// 绘制干扰线
for (int i = 0; i <= 40; i++) {
randomValidateCode.drowLine(g);
}
// 绘制随机字符
String randomString = "";
for (int i = 1; i <= 4; i++) {
randomString = randomValidateCode.drowString(g, randomString, i);
}
// 生产验证码字符串并保存到 Redis 中,ip-rightCode,有效期为 1 小时
String ip = request.getRemoteAddr();
logger.info("ip:" + ip + ",rightCode = " + randomString);
redisTemplate.opsForValue().set(ip, randomString, 20, TimeUnit.SECONDS);
g.dispose();
try {
// 将内存中的图片通过流动形式输出到客户端
ImageIO.write(image, "JPEG", response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}

效果

到此,关于"Java怎么实现登录验证码保存到redis"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

字符 验证 字符串 登录 图片 学习 对象 干扰 信息 内容 只有 图像 字母 数字 数量 更多 浏览器 帮助 浏览 生成 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 新华互联网科技 互联网巨头科技公司 腾讯阿里互联网科技 猪兼强互联网科技 善班互联网科技 互联网科技公司名称 丰台科技园 互联网公司 新华互联网科技校企合作 互联网科技公司招聘 港股科技和互联网 昭通互联网科技选哪家 哈尔滨屹滨互联网科技有限公司 互联网科技和信息 健康食品互联网创新科技园项目 亳州好赞互联网科技有限公司 为客找房互联网科技公司怎么样 山东有哪些互联网科技公司 云南互联网科技学费 兰石爱特工业互联网科技分公司 宁波允成互联网科技有限公司 中关村互联网 科技集团 蓝思科技飞鸽互联网 北京路客互联网科技有限公司 中关村互联网科技集团 北京华百购互联网科技有限公司 未来五年的互联网科技 特约风豹互联网科技为什么扣费 下一代互联网重大应用科技园 抖集互联网科技技术咨询 普陀区互联网教育科技管理办法
0