java-5图片验证码

server/2024/12/22 17:50:56/

1 图片验证码意义

验证码可以防止恶意破解密码、刷票、论坛灌水,有效防止某个黑客对某一个特定注册用户用特定程序暴力破解方式进行不断的登录尝试。由于验证码技术具有随机性随机性较强、简单的特点,能够在一定程度上阻碍网络上恶意行为的访问,在互联网领域得到了广泛的应用。

页面效果如下所示:

2 实现思路

整体的实现思路,如下图所示:

3在表现层新增一个接口

java">package com.atguigu.spzx.manager.controller;import com.atguigu.spzx.manager.service.SysUserService;
import com.atguigu.spzx.manager.service.ValidateCodeService;
import com.atguigu.spzx.model.dto.system.LoginDto;
import com.atguigu.spzx.model.vo.common.Result;
import com.atguigu.spzx.model.vo.common.ResultCodeEnum;
import com.atguigu.spzx.model.vo.system.LoginVo;
import com.atguigu.spzx.model.vo.system.ValidateCodeVo;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@Tag(name = "用户接口")
@RestController
@RequestMapping(value = "admin/system/index")
public class IndexController {@Autowiredprivate SysUserService sysUserService;@Autowiredprivate ValidateCodeService validateCodeService;//用户登录@Operation(summary = "登录")@PostMapping(value = "Login")public Result login(@RequestBody LoginDto loginDto){LoginVo loginVo = sysUserService.login(loginDto);return Result.build(loginVo, ResultCodeEnum.SUCCESS);}//登录图形验证码@Operation(summary = "生成图形验证码")@PostMapping(value = "/generateValidateCode")public Result<ValidateCodeVo> generateValidateCode(){ValidateCodeVo validateCodeVo =  validateCodeService.generateValidateCode();return Result.build(validateCodeVo, ResultCodeEnum.SUCCESS);}
}

4 定义图片验证码生成服务接口

java">package com.atguigu.spzx.manager.service;import com.atguigu.spzx.model.vo.system.ValidateCodeVo;public interface ValidateCodeService {//图片验证码生成方法ValidateCodeVo generateValidateCode();
}

5 定义图片验证码生成服务实现类

java">package com.atguigu.spzx.manager.service.impl;import cn.hutool.captcha.CaptchaUtil;
import cn.hutool.captcha.LineCaptcha;
import cn.hutool.core.img.ImgUtil;
import com.atguigu.spzx.manager.service.ValidateCodeService;
import com.atguigu.spzx.model.vo.system.ValidateCodeVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.awt.*;
import java.util.UUID;
import java.util.concurrent.TimeUnit;@Service
public class ValidateCodeServiceImpl implements ValidateCodeService {@AutowiredRedisTemplate<String,String> redisTemplate;@Overridepublic ValidateCodeVo generateValidateCode(){//1.通过工具生成图片验证码,hutoolLineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(150,45,4,2);//长、宽、位数、干扰线数量//2.把验证码存储到redis中,设置redis的key:uuid,value:验证码,过期时间String validateCode = lineCaptcha.getCode();//获取验证码值//获取验证码图片//修改验证码突破原色(先改变背景色,然后重新生成图片,将图片转为base64)lineCaptcha.setBackground(Color.decode("#f8f8f8"));Image lineCaptchaImage = lineCaptcha.createImage(validateCode);//String validateCodeB64 = lineCaptcha.getImageBase64();String validateCodeB64 = ImgUtil.toBase64(lineCaptchaImage,"png");String key ="validateCode/"+ UUID.randomUUID().toString().replaceAll("-","");redisTemplate.opsForValue().set(key,validateCode,1, TimeUnit.MINUTES);//3.返回ValidateCodeVo对象ValidateCodeVo validateCodeVo = new ValidateCodeVo();validateCodeVo.setCodeKey(key);validateCodeVo.setCodeValue("data:image/png;base64,"+validateCodeB64);return  validateCodeVo;}
}

6启动项目

打开http://localhost:3000/doc.html

点击调试可以看到接口功能正常

查看前端效果:


http://www.ppmy.cn/server/152284.html

相关文章

C++ 面向对象编程:友元、

友元&#xff1a;让一个类或函数&#xff0c;能够访问另一个类的私有成员。友元关键字为friend。 友元有三种&#xff1a;第一种是全局函数作为友元&#xff0c;第二种是类作为友元&#xff0c;第三种是成员函数作为友元 第一种是全局函数作为友元&#xff0c;见以下代码&…

高并发架构设计:从 Java Callable 到 CompletableFuture 的进阶修炼

前言 在现代的分布式系统中&#xff0c;高并发性能是一个决定系统能否成功的关键因素。而 Java 作为主流的后端开发语言&#xff0c;也提供了许多强大的工具来帮助我们处理并发任务。今天&#xff0c;我们将通过两个关键工具来讲解高并发架构设计的技巧&#xff1a;Callable 和…

vue3中的ref与reactive

摘要 在vue3直接定义变量不是响应式数据 在vue3中定义变量更改变量页面是显示不出来的 在按钮中绑定一个函数&#xff0c;当我点击它的时候发生改变str值 点击前 点击后 点击后控制台显示更改数据&#xff0c;而页面中不显示数据&#xff0c;这就是vue3没触发响应式 使用re…

mac 安装graalvm

Download GraalVM 上面链接选择jdk的版本 以及系统的环境下载graalvm的tar包 解压tar包 tar -xzf graalvm-jdk-<version>_macos-<architecture>.tar.gz 移入java的文件夹目录 sudo mv graalvm-jdk-<version> /Library/Java/JavaVirtualMachines 设置环境变…

Leetcode 串联所有单词的子串

算法思想&#xff08;中文解释&#xff09; 这道题目要求我们在字符串 s 中找到所有子串&#xff0c;这些子串是字符串数组 words 中所有单词的串联&#xff0c;并且每个单词只能使用一次&#xff0c;且顺序可以任意。下面是代码的算法思想&#xff1a; 1. 核心思路 分解问题…

三、使用langchain搭建RAG:金融问答机器人--检索增强生成

经过前面2节数据准备后&#xff0c;现在来构建检索 加载向量数据库 from langchain.vectorstores import Chroma from langchain_huggingface import HuggingFaceEmbeddings import os# 定义 Embeddings embeddings HuggingFaceEmbeddings(model_name"m3e-base")#…

信息安全管理与评估赛题第4套

全国职业院校技能大赛 高等职业教育组 信息安全管理与评估 赛题四 模块一 网络平台搭建与设备安全防护 1 赛项时间 共计180分钟。 2 赛项信息 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 网络平台搭建与设备安全防护 任务1 网络平台搭建 XX:XX- XX:XX 50 任务2…

视频点播系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️&#xff1a;架构: B/S、MVC 2⃣️&#xff1a;系统环境&#xff1a;Windowsh/Mac 3⃣️&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Mysql5.7 4⃣️&#xff1a;技术栈&#xff1a;Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…