首页 > 其他分享 >验证码图片

验证码图片

时间:2024-07-15 16:51:38浏览次数:6  
标签:code String 验证码 captchaType captcha 图片 uuid

前言:最近写的实验室的一个管理系统需要更改登录界面的验证码,原来使用的是若依的,但是有时确实容易看错,没有太大必要,所以就更换一个简单清晰的,在网上看了一下之后,决定更换为easy-captcha来实现

1 生成验证的流程

⬇️前端发送请求

⬇️后端接受请求并进行处理

​ ↘️生成uuid、验证码和图片

​ ↘️将uuid拼接上前缀与验证码code存入redis -- 同时设置超时时间

​ ↘️将图片进行base64编码

​ ↘️将uuid、code、img的base64编码放入统一返回对象result

⬇️后端响应请求

⬇️前端接收响应、将base64编码处理成图片显示在界面上

⬇️前端封装账号、密码和验证码同时携带uuid发送登录请求

⬇️后端处理登录请求

​ ↘️首先通过uuid从redis中获取验证码code,同时从redis中删除该对象

​ ➡️code为空,抛出异常

​ ➡️code与请求发送的code不匹配,抛出异常

​ ↘️code匹配,继续处理账号密码...

2 具体实现

2.1 首先引入依赖

		<dependency>
            <groupId>com.github.whvcse</groupId>
            <artifactId>easy-captcha</artifactId>
            <version>1.6.2</version>
        </dependency>

2.2 添加captchaType配置

ruoyi:
	captchaType: char

2.3 编写获取验证码的接口

/**
 * 验证码操作处理
 * 
 * @author ruoyi
 */
@RestController
public class CaptchaController
{
    @Autowired
    private RedisCache redisCache;
    
    // 验证码类型
    @Value("${ruoyi.captchaType}")
    private String captchaType;

    /**
     * 生成验证码 使用easy-captcha
     * @param response
     * @return
     * @throws IOException
     */
    @GetMapping("/captchaImage")
    public AjaxResult getCode(HttpServletResponse response) throws IOException{
        // 保存验证码信息
        String uuid = IdUtils.simpleUUID();
        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; // 存入redis的键值

        String capStr = null, code = null;
        BufferedImage image = null;

        //验证码EasyCaptcha工具
        Captcha captcha = null;
        if ("math".equals(captchaType)) {
            //创建算术验证码
            captcha = new ArithmeticCaptcha(115, 42);
        } else if ("chinese".equals(captchaType)) {
            //中文验证
            captcha = new ChineseCaptcha(115, 42);
        } else if ("char".equals(captchaType)) {
            //创建字符验证码
            captcha = new SpecCaptcha(115,42);
        }
        code = captcha.text();
        redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
        AjaxResult ajax = AjaxResult.success();
        ajax.put("uuid",uuid);
        String base64 = captcha.toBase64();
        ajax.put("img",base64.substring(base64.indexOf(',')+1));
        return ajax;
    }
}

2.4 编写验证代码

public String login(String username, String password, String code, String uuid){
        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
        String captcha = redisCache.getCacheObject(verifyKey);
        redisCache.deleteObject(verifyKey);
        if (captcha == null)
        {
            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")));
            throw new CaptchaExpireException();
        }
        if (!code.equalsIgnoreCase(captcha))
        {
            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")));
            throw new CaptchaException();
        }
        // 用户验证...
}

参考文章:https://blog.csdn.net/qq_47425247/article/details/125553351

标签:code,String,验证码,captchaType,captcha,图片,uuid
From: https://www.cnblogs.com/yuqiu2004/p/18303491

相关文章

  • 如何将JPG图片转换成可编辑的word文档?
    在日常办公和学习中,我们时常需要将图片中的文字信息转换为Word文档,以便于编辑、整理和分享。虽然这一过程看似复杂,但实际上有多种方法可以实现。那么图片怎么转换成word文档呢?本文将为您介绍三种常用的方法,帮助您轻松将图片转换为Word文档。方法一:手动输入对于文字量较小或者对......
  • 前端实现图片裁剪功能,插件版和原生版
    概要最近遇到了一个需要用到图片裁剪功能,自己找了一些资料,有插件版和原生版的,VUE版本的我就不放了,原理类似,供大家参考。插件版Cropper.js是一个用于裁剪图像的JavaScript插件。它可以让用户在浏览器中对图像进行裁剪和编辑操作,具体功能包括但不限于:1.图像裁剪:允许......
  • python 基础中requests 验证码
    验证码登录importrequests#古诗文网登录页面的URL地址url='https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTM......
  • 去重技巧:图片怎么查重?4个图片查重方法大公开!(2024 New)
    照片是保存记忆的绝佳工具。它们是终极时间胶囊,能够唤起久违的记忆和情感。然而,随着照片数量的迅速增长,我们电脑的存储空间也被它们占据得满满当当。这一大部分责任归咎于我们设备上无数的重复照片。这些重复照片由于我们的疏忽而产生,因我们的无所谓而滞留在电脑中。摆脱这些重......
  • 卡通AI图片生成器
    AI卡通生成器是一个AI工具,你可以毫不费力地用文本创建美丽的卡通图像!AI卡通生成器简介:创意与轻松相遇的地方!有了我们创新的人工智能工具,用文字制作迷人的卡通图像就像点击一样简单。无论你是将可爱的人工智能动物带到生活中,还是用人工智能故事漫画讲述引人入胜的故事,或者设计你......
  • 写真图片视频打赏系统源码全开源无加密
    这是一款开源的写真图片及视频打赏系统源码,顾名思义他可以做写真图片打赏站也可以做视频打赏站,支付对接了易支付,拥有独立代理后台,全部源码无加密,另外也可以配合付费进群使用。支付扣量、域名防洪这些基本的就不介绍了,看图吧!留给有需要的人!源码下载:图片视频打赏系统源码.zip可......
  • C# 图片保存 缩略图保存
    前言项目需要保存缩略图,写了个简单的保存代码。在包控制管理工具中安装Magick.NET-Q16-AnyCPUusingImageMagick;代码根据原图的格式保存缩略图///<summary>///保存缩略图///</summary>///<paramname="originalFilePath">原......
  • springboot+vue前后端分离项目-项目搭建10-验证码功能
    本次演示的验证码功能只涉及前端,而且功能简单1.新建vue/src/components/ValidCode.vue<template><divclass="ValidCodedisabled-select":style="`width:${width};height:${height}`"@click="refreshCode"><spanv-f......
  • base64 数据转png本地图片保存,js实现
    要将base64编码的图像数据保存为PNG文件到本地,可以借助JavaScript和浏览器的FileAPI。以下是一个简单的步骤和示例代码:步骤:解析Base64数据:将Base64编码的字符串解析为二进制数据。创建Blob对象:使用解析后的二进制数据创建一个Blob对象。创建URL:通过UR......
  • 音视频开发—使用FFmpeg从纯H264码流中提取图片 C语言实现
    文章目录1.H264码流文件解码流程关键流程详细解码流程详细步骤解析2.JPEG编码流程详细编码流程详细步骤解析3.完整示例代码4.效果展示从纯H.264码流中提取图片的过程包括解码和JPEG编码两个主要步骤,以下是详细阐述1.H264码流文件解码流程关键流程查找编解码器......