2、图形验证码

1、图形验证码设计

1.1思路

        现今,市面上的图形验证码付费的,免费的多种多样,主要形式有滑动拼图、文字点选、语序点选、字体识别、空间推理、智能随机等。

        而处理也分为web端和sever端两部分

        此处以免费的kaptcha 为例,进行数字图形验证码的解析

2、server 端

2.1 controller 

@RestController
@Slf4j
@RequestMapping("/sys")
public class SysLoginController {

    @Resource
    private ISysCaptchaService sysCaptchaService;

    @GetMapping("/captcha/{uuid}")
    public void captcha(HttpServletResponse response, @PathVariable("uuid") String uuid) throws IOException {
        response.setHeader("Cache-Control", "no-store, no-cache");
        response.setContentType("image/jpeg");
        //获取图片验证码
        BufferedImage image = sysCaptchaService.getCaptcha(uuid);
        ServletOutputStream out = response.getOutputStream();
        ImageIO.write(image, "jpg", out);
        IOUtils.closeQuietly(out);
    }

}

2.2 service

public interface ISysCaptchaService extends IService<SysCaptcha> {
    /**
     * 获取图片验证码
     *
     * @param uuid uuid
     * @return Image
     */
    BufferedImage getCaptcha(String uuid);
}

2.3 serviceImpl

//此处引入了kaptcha的Producer
import com.google.code.kaptcha.Producer;

@Service
public class SysCaptchaServiceImpl extends ServiceImpl<SysCaptchaMapper, SysCaptcha> implements ISysCaptchaService {
    @Resource
    private Producer producer;

    @Override
    public BufferedImage getCaptcha(String uuid) {
        if (StrUtil.isBlank(uuid)) {
            throw new RuntimeException("uuid不能为空");
        }
        //生成文字验证码
        String code = producer.createText();

        SysCaptcha captchaEntity = new SysCaptcha();
        captchaEntity.setUuid(uuid);
        captchaEntity.setCode(code);
        //5分钟后过期
        captchaEntity.setExpireTime(DateUtil.offset(DateUtil.date(), DateField.MINUTE, 5).toLocalDateTime());
        //将数据写入数据库,此处最好可以写入到redis等缓存中,不需要过期手动处理
        this.save(captchaEntity);

        return producer.createImage(code);
    }
}

2.4 配置KaptchaConfig

@Configuration
public class KaptchaConfig {
    @Bean
    public DefaultKaptcha producer() {
        Properties properties = new Properties();
        properties.put("kaptcha.border", "no");
        properties.put("kaptcha.textproducer.font.color", "black");
        properties.put("kaptcha.textproducer.char.space", "5");
        properties.put("kaptcha.textproducer.font.names", "Arial,Courier,cmr10,宋体,楷体,微软雅黑");
        Config config = new Config(properties);
        DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
        defaultKaptcha.setConfig(config);
        return defaultKaptcha;
    }
}

不进行config配置时,会报如下异常

**************************
APPLICATION FAILED TO START
***************************
Description:
A component required a bean of type 'com.google.code.kaptcha.Producer' that could not be found.

Action:
Consider defining a bean of type 'com.google.code.kaptcha.Producer' in your configuration.

2.5 pom.xml

    <properties>
        <kaptcha.version>2.3.5</kaptcha.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.youkol.support.kaptcha</groupId>
            <artifactId>kaptcha-spring-boot-starter</artifactId>
            <version>${kaptcha.version}</version>
        </dependency>
    </dependencies>

2.6 数据库表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sys_captcha
-- ----------------------------
DROP TABLE IF EXISTS `sys_captcha`;
CREATE TABLE `sys_captcha`  (
  `uuid` char(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'uuid',
  `code` varchar(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '验证码',
  `expire_time` datetime NULL DEFAULT NULL COMMENT '过期时间',
  PRIMARY KEY (`uuid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统验证码' ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

2.7 测试

3、web端

3.1 vue3 安装 uuid 小插件

3.1.1 安装

pnpm add vue3-uuid

如果pnpm安装异常

切换pnpm源

pnpm config set registry https://registry.npmmirror.com //切换淘宝源 

3.1.2 main.ts中引入

import { createApp } from 'vue'

import App from './App.vue'
import router from './router'
import pinia from '@/stores'
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'
//@ts-expect-error忽略当前文件ts类型的检测否则有红色提示(打包会失败)
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
import 'virtual:svg-icons-register'
import '@/styles/index.scss'
//使用UUID
import UUID from 'vue3-uuid'

const app = createApp(App)

app.use(pinia)
app.use(router)
app.use(UUID)
app.use(ElementPlus, {
  'locale': zhCn
})

app.mount('#app')

3.1.3 使用

import { uuid } from 'vue3-uuid'

const getCaptcha = () => {
  const id = uuid.v4()
  console.log('@@@@', id)
}

3.2 加载验证码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/776900.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vatee万腾平台:智能生活的新选择

在科技飞速发展的今天&#xff0c;智能生活已经不再是遥不可及的梦想&#xff0c;而是逐渐渗透到我们日常生活的方方面面。Vatee万腾平台&#xff0c;作为智能科技领域的佼佼者&#xff0c;正以其创新的技术、丰富的应用场景和卓越的用户体验&#xff0c;成为智能生活的新选择&…

免费的K歌软件

提到K歌软件&#xff0c;目前市场上的选择似乎并不多&#xff0c;全民的会员制非常恶心&#xff01;除此之外&#xff0c;IKTV和想唱还不错是其中的热门选择&#xff0c;不过它们的更新频率有点让人有些疲倦。不过最近一款TV K歌软件非常火爆&#xff0c;而且他的曲库更新也是非…

输入框输入值之后,检索表格中是否存在输入框中的值,存在就让当前文字为红色

this.searchValue为输入框的值 createKeywordHtml_content(data) { if (data undefined) { return data; } if (typeof data ! string) { data String(data) } let value data.replace(this.searchValue, <span style"color:#FF5555">$&</span>…

LivePortrait:一张照片生成生动视频,精准操控眼睛和嘴唇动作 本地一键整合包下载

LivePortrait&#xff0c;这个名字听起来就像是魔法&#xff0c;但它其实是现实世界中的黑科技。想象一下&#xff0c;你那尘封已久的相册里&#xff0c;那些定格在时间里的笑脸&#xff0c;突然间动了起来&#xff0c;眨眼、微笑、甚至说话&#xff0c;这不再是电影里的场景&a…

2024 WAIC|第四范式胡时伟分享通往AGI之路:行业大模型汇聚成海

7月4日&#xff0c;2024世界人工智能大会&#xff08;WAIC&#xff09;正式开幕。此次大会围绕核心技术、智能终端、应用赋能等板块展开&#xff0c;展览规模、参展企业数均达历史最高。第四范式受邀参展&#xff0c;集中展示公司十年来在行业大模型产业应用方面的实践。在当天…

不要再盲目入场啦!跨境电商入场第一步!先收集整理这些数据,看清自己该如何入场!【纯分享】

23年、24年确实无愧于“品牌出海元年”的称号&#xff0c;23年出海四小龙——速卖通、TikTokshop、Temu、Shein在海外的爆发让大家看到了海外市场的活动&#xff1b;而24年则有更多的国内品牌将目光瞄向了海外市场&#xff0c;年后开工到今天基本上每天都有客户来咨询出海相关的…

Python制作动态颜色变换:颜色渐变动效

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame颜色变换函数主循环 完整代码 引言 颜色渐变动画是一种视觉上非常吸引人的效果&#xff0c;常用于网页设计和图形应用中。在这篇博客中&#xff0c;我们将使用Python创建一个动态颜色变换的动画效果。通…

PMP–知识卡片--马斯洛需求理论

记忆 马&#xff08;马斯洛&#xff09;背着很多东西&#xff0c;很累&#xff08;生理需要&#xff09;需要找个地方休息&#xff0c;而且需要安全&#xff08;安全需要&#xff09;的地方&#xff0c;就要找朋友&#xff08;社交需要&#xff09;帮忙&#xff0c;但是由于自尊…

【IT领域新生必看】深入浅出Java:揭秘`Comparator`与`Comparable`的神奇区别

文章目录 引言什么是Comparable接口&#xff1f;Comparable接口的定义实现Comparable接口示例&#xff1a; 什么是Comparator接口&#xff1f;Comparator接口的定义实现Comparator接口示例&#xff1a; Comparable与Comparator的区别排序逻辑位置示例&#xff1a; 可扩展性示例…

【IT领域新生必看】深入浅出Java:值传递与引用传递的神奇区别

文章目录 引言什么是值传递&#xff1f;定义和使用值传递示例&#xff1a; 什么是引用传递&#xff1f;定义和使用引用传递示例&#xff1a; 值传递与引用传递的区别参数类型示例&#xff1a; 参数传递方式示例&#xff1a; 修改效果示例&#xff1a; 内存管理示例&#xff1a;…

WPF UI 3D 基本概念 点线三角面 相机对象 材质对象与贴图 3D地球 光源 变形处理 动作交互 辅助交互插件 系列三

WPF UI交互专题 平面图形 Path Drawing 绘图 渐变 Brush 矩阵 Transform 变形 阴影效果 模糊效果 自定义灰度去色效果 系列二-CSDN博客 1软件中的3D基本概念 WPF 中 3D 功能的设计初衷并非提供功能齐全的游戏开发平台。 WPF 中的 3D 图形内容封装在 Viewport3D 元素中&#x…

倒退型自闭症与轻度自闭症有什么区别?

作为星贝育园自闭症儿童康复中心的一名专业教师&#xff0c;我深知家长们在面对自闭症谱系障碍&#xff08;ASD&#xff09;时的种种疑问与挑战&#xff0c;尤其是关于倒退型自闭症与轻度自闭症之间的区别。今天&#xff0c;我将从专业视角出发&#xff0c;深入浅出地解析这两种…

【PWN · ret2shellcode | sandbox-bypass | 格式化字符串】[2024CISCN · 华东北赛区]pwn1_

一道栈ret2shellcodesandbox&#xff08;seccomp&#xff09;格式化字符串的题目 前言 ret2shellcode&#xff0c;已经不是简单的放到栈上、ret这样一个简单的过程。套一层seccomp的沙箱&#xff0c;打ORW又遇到open受限等等&#xff0c;考虑的蛮多。过程中收获最多的可以说是…

谷粒商城学习笔记-13-配置git-ssh-配置代码免密提交

文章目录 一&#xff0c;安装配置Git客户端1&#xff0c;下载git客户端安装包2&#xff0c;安装3&#xff0c;配置3.1&#xff0c;配置用户名3.2&#xff0c;配置邮箱3.3&#xff0c;配置详解 二&#xff0c;配置Git免密1&#xff0c;生成SSH密钥对2&#xff0c;Git配置公钥3&a…

Python数据分析-分子数据分析和预测

一、设计背景 分子结构设计与性质计算对研发新型高能量密度材料具有重要意义。机器学习作为一种大数据计算模型&#xff0c;可以避免复杂、危险的实验&#xff0c;大幅提高研发效率、降低设计和计算成本。本文基于机器学习的方法以及通过构建神经网络&#xff0c;实现对高能量…

HTTP协议格式

目录 正文&#xff1a; 1.概述 2.主要特点 3.请求协议格式 4.响应协议格式 5.响应状态码 总结&#xff1a; 正文&#xff1a; 1.概述 HTTP 协议是用于传输超文本数据&#xff08;如 HTML&#xff09;的应用层协议&#xff0c;它建立在传输层协议 TCP/IP 之上。当我们在…

无人机运营合格证及无人机驾驶员合格证(AOPA)技术详解

无人机运营合格证及无人机驾驶员合格证&#xff08;AOPA&#xff09;技术详解如下&#xff1a; 一、无人机运营合格证 无人机运营合格证是无人机运营企业或个人必须获得的证书&#xff0c;以确保无人机在运营过程中符合相关法规和标准。对于无人机运营合格证的具体要求和申请…

【计算机毕业设计】020基于weixin小程序订餐系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【Linux进阶】文件系统4——文件系统特性

1.磁盘组成与分区的复习 首先说明一下磁盘的物理组成&#xff0c;整块磁盘的组成主要有&#xff1a; 圆形的碟片&#xff08;主要记录数据的部分&#xff09;&#xff1b;机械手臂&#xff0c;与在机械手臂上的磁头&#xff08;可擦写碟片上的数据);主轴马达&#xff0c;可以…

Beats:使用 Filebeat 从 Python 应用程序中提取日志

本指南演示了如何从 Python 应用程序中提取日志并将其安全地传送到 Elasticsearch Service 部署中。你将设置 Filebeat 来监控具有标准 Elastic Common Schema (ECS) 格式字段的 JSON 结构日志文件&#xff0c;然后你将在 Kibana 中查看日志事件发生的实时可视化。虽然此示例使…