广告
返回顶部
首页 > 资讯 > 精选 >javaWeb怎么实现随机图片验证码
  • 104
分享到

javaWeb怎么实现随机图片验证码

2023-06-14 09:06:03 104人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关javaweb怎么实现随机图片验证码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现步骤Java后台生成一张随机数字/字母/汉字验证码的图片。存入redis或者session。用户输入

这篇文章给大家分享的是有关javaweb怎么实现随机图片验证码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

实现步骤

Java后台生成一张随机数字/字母/汉字验证码的图片。

存入redis或者session。

用户输入验证码跟Redis取出数据做比对。

图片生成工具

public class RandomValidateCodeUtil { 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 = 40;// 干扰线数量 private int stringNum = 4;// 随机产生字符数量 private static final Logger logger = LoggerFactory.getLogger(RandomValidateCodeUtil.class); private Random random = new Random();  private Font getFont() {  return new Font("Fixedsys", Font.CENTER_BASELINE, 18); }  private 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 getRandcode(httpservletRequest request, HttpServletResponse response) {  HttpSession session = request.getSession();  // BufferedImage类是具有缓冲区的Image类,Image类是用于描述图像信息的类  BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);  Graphics g = image.getGraphics();// 产生Image对象的Graphics对象,改对象可以在图像上进行各种绘制操作  g.fillRect(0, 0, width, height);//图片大小  g.setFont(new Font("Default", Font.ROMAN_BASELINE, 18));//字体大小  g.setColor(getRandColor(110, 133));//字体颜色  // 绘制干扰线  for (int i = 0; i <= lineSize; i++) {   drowLine(g);  }  // 绘制随机字符  String randomString = "";  for (int i = 1; i <= stringNum; i++) {   randomString = drowString(g, randomString, i);  }  logger.info(randomString);  g.dispose();  try {   // 将内存中的图片通过流动形式输出到客户端   ImageIO.write(image, "JPEG", response.getOutputStream());  } catch (Exception e) {   logger.error("将内存中的图片通过流动形式输出到客户端失败>>>> ", e);  }  return randomString; }  private 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; }  private 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)); }}

使用工具类生成

 @GetMapping(value = "/getVerify") @apiOperation("生成图片验证码") public void getVerify(HttpServletRequest request, HttpServletResponse response) {  try {   //设置相应类型,告诉浏览器输出的内容为图片   response.setContentType("image/jpeg");   //设置响应头信息,告诉浏览器不要缓存此内容   response.setHeader("Pragma", "No-cache");   response.setHeader("Cache-Control", "no-cache");   response.setDateHeader("Expire", 0);   RandomValidateCodeUtil randomValidateCode = new RandomValidateCodeUtil();   //输出验证码图片方法   String randcode = randomValidateCode.getRandcode(request, response);      // 将随机生成的字符串放在redis中   redisUtil.save("random", randcode);      // 将生成的随机字符串保存到session中   // HttpSession session = request.getSession();   // session.removeAttribute(RANDOMCODEKEY);   // session.setAttribute(RANDOMCODEKEY, randomString);  } catch (Exception e) {   log.error("获取验证码失败>>>> ", e);  } }

当有请求进来时

告诉浏览器如何接收图片。

使用工具类生成图片 。

将验证码存入redis或者seesion。

调用成功图片已流给浏览器

获得图片:

javaWeb怎么实现随机图片验证码

校验图形验证码

@PostMapping("/checkVerify")  @ApiOperation("校验图形验证码")  public String checkValidateCode(String verify) {    // 校验验证码    try {      // 从redis中获取验证码      String random = (String) redisUtil.findKey("random");      // 从ression中获取验证码      HttpSession session = request.getSession();      String random = session.getAttribute("random");      log.info("获取的随机数 random = {}", random);      if (org.springframework.util.StringUtils.isEmpty(verify)) {        return "没有输入验证码";      }      if (verify.equals(random)) {        redisUtil.delkey("random");      } else {        return "验证码错误";      }    } catch (Exception e) {      log.error("验证码校验失败", e);      return "服务器异常";    }    return "成功";  }

验证:从redis或者seesion取出存入的验证码与用户输入的比对,相同验证成功,反之验证失败。

感谢各位的阅读!关于“javaWEB怎么实现随机图片验证码”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: javaWeb怎么实现随机图片验证码

本文链接: https://www.lsjlt.com/news/269342.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • javaWeb怎么实现随机图片验证码
    这篇文章给大家分享的是有关javaWeb怎么实现随机图片验证码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现步骤Java后台生成一张随机数字/字母/汉字验证码的图片。存入redis或者session。用户输入...
    99+
    2023-06-14
  • javaWeb如何实现随机图片验证码详解
    实现步骤 1:Java后台生成一张随机数字/字母/汉字验证码的图片。 2:存入redis或者session。 3:用户输入验证码跟redis取出数据做比对。 图片生成工具类 ...
    99+
    2022-11-12
  • java怎么实现随机验证码图片生成
    这篇文章主要介绍“java怎么实现随机验证码图片生成”,在日常操作中,相信很多人在java怎么实现随机验证码图片生成问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”java怎么实现随机验证码图片生成”的疑惑有所...
    99+
    2023-06-25
  • java实现随机验证码图片生成
    本文实例为大家分享了java生成随机验证码图片的具体代码,供大家参考,具体内容如下 1.controller @GetMapping(value = "/getRan...
    99+
    2022-11-12
  • 怎么用Python实现随机生成图片验证码
    本篇内容主要讲解“怎么用Python实现随机生成图片验证码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现随机生成图片验证码”吧!导入模块import random...
    99+
    2023-06-26
  • Python实现随机生成图片验证码详解
    使用python生成一个图片验证码,随机的,可以由于验证人机和别的啊,很方便很简单 导入模块 import random from PIL import Image,ImageFon...
    99+
    2022-11-13
  • php怎么实现图片验证码
    本文操作环境:Windows7系统、PHP7.1版,DELL G3电脑。php怎么实现图片验证码?PHP实现图片验证码功能验证码: captcha, 是一种用于区别人和电脑的技术原理(Completely Automated Public ...
    99+
    2017-09-20
    php
  • vue+Element怎么实现登录随机验证码
    今天小编给大家分享一下vue+Element怎么实现登录随机验证码的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。验证码验证只...
    99+
    2023-06-29
  • java实现图片验证码
    本文实例为大家分享了java实现图片验证码的具体代码,供大家参考,具体内容如下 目的: 1) 验证操作者是否是人 2) 防止表单重复提交 生成验证码的要点: 1) 使用java代码生...
    99+
    2022-11-13
  • JS实现随机生成验证码
    本文实例为大家分享了JS实现随机生成验证码的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head>...
    99+
    2022-11-12
  • Android实现随机生成验证码
    本文实例为大家分享了Android验证码的随机生成代码,供大家参考,具体内容如下 Code.java package com.example.myapp; import and...
    99+
    2022-11-12
  • JAVA怎么实现随机生成四位验证码
    Java可以使用Random类来实现随机生成四位验证码。下面是一个示例代码:```javaimport java.util.Rand...
    99+
    2023-08-09
    JAVA
  • Android自定义View绘制随机生成图片验证码
    本篇文章讲的是Android自定义View之随机生成图片验证码,开发中我们会经常需要随机生成图片验证码,但是这个是其次,主要还是想总结一些自定义View的开发过程以及一些需要注...
    99+
    2022-06-06
    view 图片 验证码 Android
  • react怎么实现图片验证
    本教程操作环境:Windows10系统、react18版、Dell G3电脑。react怎么实现图片验证?react实现图片验证码效果如图所示:import React, { Component } from 'react'...
    99+
    2023-05-14
    React
  • Springboot+SpringSecurity怎么实现图片验证码登录
    本文小编为大家详细介绍“Springboot+SpringSecurity怎么实现图片验证码登录”,内容详细,步骤清晰,细节处理妥当,希望这篇“Springboot+SpringSecurity怎么实现图片验证码登录”文章能帮助大家解决疑惑...
    99+
    2023-06-30
  • JavaScript实现随机生成验证码及校验
    本文实例为大家分享了JavaScript实现随机生成验证码及校验的具体代码,供大家参考,具体内容如下 输入验证码(区分大小写)点击确认,进行校验。出错就弹框提示 点击 看不清 重新随...
    99+
    2022-11-12
  • vue+Element实现登录随机验证码
    本文实例为大家分享了vue+Element实现登录随机验证码的具体代码,供大家参考,具体内容如下 验证码验证只是前端,无需后台交互 首先,创建一个identify.vue页面,用于写...
    99+
    2022-11-13
  • Android怎么自定义View实现随机数验证码
    本篇内容介绍了“Android怎么自定义View实现随机数验证码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果自定义 View 分类简单...
    99+
    2023-07-02
  • Vue实现图片验证码生成
    图片验证码主要用于注册,登录等提交场景中,目的是防止脚本进行批量注册、登录、灌水,相比不带图片验证的安全度有所提高,不过目前也有自动识别图片验证码的程序出现,基本都是付费识别,随之又...
    99+
    2022-11-13
  • java实现动态图片验证码
    目的:防止恶意表单注册生成验证码图片定义宽高int width = 100; int height = 50;使用BufferedImage在内存中生成图片BufferedImage image = new BufferedImage(wi...
    99+
    2019-04-24
    java入门 java 动态 图片验证码
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作