java怎么实现随机验证码图片生成
发表于:2025-02-06 作者:千家信息网编辑
千家信息网最后更新 2025年02月06日,这篇文章主要介绍"java怎么实现随机验证码图片生成",在日常操作中,相信很多人在java怎么实现随机验证码图片生成问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"jav
千家信息网最后更新 2025年02月06日java怎么实现随机验证码图片生成
这篇文章主要介绍"java怎么实现随机验证码图片生成",在日常操作中,相信很多人在java怎么实现随机验证码图片生成问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"java怎么实现随机验证码图片生成"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
具体内容如下
1.controller
/** * 获取随机数验证码图片 * * @param request HttpServletRequest * @param response HttpServletResponse */ @GetMapping(value = "/getRandomCode" ,produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) public void getRandomCode(HttpServletRequest request, HttpServletResponse response) { baseService.getRandomCode(request, response);}
2.service
void getRandomCode(HttpServletRequest request, HttpServletResponse response);
3.serviceImpl
@Autowired private RedisTemplate redisTemplate; @Autowired private CodeImageUtils codeImageUtils; /** * 获取随机数验证码图片 */ @Override public void getRandomCode(HttpServletRequest request, HttpServletResponse response) { try { // 设置输出类型为图片 response.setContentType("image/jpeg"); // 生成随机码 String verificationCode = codeImageUtils.getRandomCode(); // 背景颜色与字符颜色 Color color = codeImageUtils.getRandomColor(); Color reverseColor = codeImageUtils.getReverseColor(color); //创建一张彩色的图片 BufferedImage bi = new BufferedImage(100, 30, BufferedImage.TYPE_INT_RGB); Graphics2D graphics = bi.createGraphics(); //设置字体 graphics.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 16)); graphics.setColor(color); //绘制背景 graphics.fillRect(0, 0, 100, 30); graphics.setColor(reverseColor); //绘制字符 graphics.drawString(verificationCode, 18, 20); //绘制最多50个随机噪点//绘制最多50个随机噪点 Random random = new Random(); int n = random.nextInt(50); for (int i = 0; i < n; i++) { graphics.drawRect(100, 30, 1, 1); } // 放到redis中 sessionId:code,过期时间60s redisTemplate.opsForValue().set(request.getSession().getId(),verificationCode,60, TimeUnit.SECONDS); //输出到客户端 ServletOutputStream sos = response.getOutputStream(); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos); encoder.encode(bi); sos.flush(); }catch (Exception ex){ log.error("生成验证码失败!",ex); } }
4.CodeImageUtils
@Componentpublic class CodeImageUtils { @Autowired RedisTemplate redisTemplate; /** * 生成4位随机的验证码字符串 * * @return */ public String getRandomCode() { // 通过random生成4位随机数字码 Random random = new Random(); StringBuilder rs = new StringBuilder(); for (int i = 0; i < 4; i++) { rs.append(random.nextInt(10)); } return rs.toString(); } /** * 生成随机的颜色 * * @return */ public Color getRandomColor() { Random random = new Random(); return new Color(random.nextInt(255), random.nextInt(255), random.nextInt(255)); } /** * 获取某颜色的反色 * @param color * @return */ public Color getReverseColor(Color color) { return new Color(255 - color.getRed(), 255 - color.getGreen(), 255 - color.getBlue()); } /** * 校验 * @param code * @return */ public boolean valid(HttpServletRequest request,String code){ // 获取缓存的code Object cacheCode = redisTemplate.opsForValue().get(request.getSession().getId()); if(cacheCode ==null){ return false; } return code.equals(cacheCode); }}
5.请求该接口
6.ImageIO
JPEGCodec这个在高版本的jdk中过期了,替换为ImageIO
//输出到客户端 ServletOutputStream sos = response.getOutputStream(); /*JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos); encoder.encode(bi);*/ ImageIO.write(bi, "PNG", sos); sos.flush();
7.sessionId不一致
以上代码在单节点部署情况下暂时没发现什么问题,但是在多节点部署时会出现sessionId不一致的问题,(别问我怎么知道的…踩坑使我进步)。
解决方案为使用@EnableRedisHttpSession注解来开启session共享。
新增依赖
org.springframework.session spring-session-data-redis 2.1.12.RELEASE
新增配置
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400)
到此,关于"java怎么实现随机验证码图片生成"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
生成
图片
验证
颜色
学习
字符
问题
随机数
输出
客户
客户端
更多
背景
节点
帮助
实用
一致
接下来
上代
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发项目后期工作计划
我们应该注意网络安全英文
怎么清除苹果8云端数据库
用友t3怎么导入账套数据库
机要局 网络安全宣传周
如何进sql数据库
中亚网络技术开发有限公司
停车系统服务器无法连接
工控系统网络安全培训心得
服务器代理端安全管理软件
方舟恐龙新服务器
软件开发管理书
计算机网络安全教程dpf
世界上网络安全
武汉船舶学院计算机网络技术
网络技术促进农业发展
小蚁科技全球互联网大会
惠普服务器电脑开机风扇狂转
网络安全研究生学什么的
自建服务器实现功能
宿迁数据分布式存储数据库
服务器路径怎么写
c linq查不到数据库
我的世界服务器制作
西藏云缇服务器
计算机网络技术专业专业风采展示
数据库相互间的联系
web分析服务器目录
德令哈软件开发有限公司
区块链对接服务器