前后端分离项目中实现图形验证码

图形验证码在我们的日常生活中时经常用到的,一般用于用户的登录、注册等。

图形验证码在互联网应用中的作用是提高安全性、防止滥用和保护用户隐私。它是一种简单而有效的人机验证技术,帮助保护系统和用户免受自动化攻击的影响。

本次我们通过spring boot后端项目生成图形验证码,通过vue3前端项目来展示验证码;

在vue3前端项目中新建一个Captcha.vue文件,用来展示图形验证码。

新建一个spring boot后端项目,并引入hutool依赖,来提供图形验证码

前端:

在Captcha.vue文件中用img标签来展示验证码:
 

<img :src="codeImage" @click="getCode" style="transform: scale(0.9);"/>

可以看到,在img标签中绑定了src属性为codeImage,这个属性需要我们在script标签中定义,并用ref框起来,定义为响应式。它是用来接收后端传回的图片验证码的

定义了一个点击方法为getCode,这个方法同样需要我们在script标签中定义,这个方法是用来向后端发送请求,来获取图形验证码的;

const getCode=async()=>{let {data}=await axios.get('http://localhost:8888/getCaptcha')codeImage.value=data.data}

使用onMounted生命周期函数使getCode获取验证码方法在这个组件挂载时执行,这样进入这个组件之后就能直接看到这个图形验证码了;

后端:

新建一个spring boot项目,并引入hutool的依赖:
 

  <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.18</version></dependency>

在后端使用Cors来允许跨域请求:
 

@Component
public class MyWebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**")  //指定允许跨域请求的路径模式为"/**",表示所有的路径都将允许跨域访问。.allowedOrigins("*") // 允许访问资源的域名.allowedMethods("*") // 允许的HTTP方法.allowedHeaders("*") // 允许的请求头.allowCredentials(false) // 是否允许发送凭证信息.maxAge(3600); // 预检请求的有效期}}

新建一个CaptchaController类,在这个类中实现验证码的生成:
 

@RestController
@RequestMapping("/getCaptcha")
public class CaptchaController {@Autowiredprivate RedisTemplate<String,String> redisTemplate;@GetMapping
public String getCaptcha(){//  150、50为图形的长、宽。 4表示生成4位验证码,2表示干扰线是2位,并放入redisCircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(150, 50, 4, 2);String codeValue = circleCaptcha.getCode();String imageBase64 = circleCaptcha.getImageBase64();redisTemplate.opsForValue().set(codeValue,codeValue,5, TimeUnit.MINUTES);
//    "data:images/png;base64,"+imageBase64    直接显示return "data:images/png;base64,"+imageBase64;}

由于验证码不是什么太重要的东西,所以我直接使用base64编码的方式来传递了,由于我们生成的是图形验证码,所以需要在生成的base64编码前拼上"data:images/png;base64,"。在这里,我将生成的验证码存入了redis中,并设置5分钟过期。将来验证时,直接从redis中取数据验证即可;

这样才能使前端直接显示出图形验证码;

在这里解释一个base64编码:

Base64 编码是一种将二进制数据转换为文本字符串的方法。将图片数据进行 Base64 编码的主要目的是方便在文本格式下传输和处理图片数据,而不需要使用二进制格式。Base64 编码后的数据可以直接嵌入到文本中,比如在 HTML、CSS 或 JSON 中,无需担心特殊字符的处理。

显示图片时,通常需要一个能够解析并渲染图片的方式。在前端开发中,<img> 标签是用于显示图片的常见方式,它的 src 属性可以接受图片的 URL。使用 Base64 编码的方式,可以将图片数据直接嵌入到 src 属性中,从而实现在浏览器中显示图片。

需要注意的是,Base64 编码会增加数据的体积约 33% 左右,因为每三个字节的二进制数据会被编码为四个字符。这会导致传输和处理的效率稍微降低。但对于较小的图片或需要嵌入在文本中的情况,使用 Base64 编码是一个方便的选择。对于大型图片或需要频繁进行传输和处理的情况,建议直接使用图片的 URL 进行显示。

现在,我们已经完成了所有的操作。我们现在分别启动前后端的项目。

可以看到,我们生成了四位数的图形验证码,并且,我们在onMount生命周期函数和图片的点击函数中都绑定了getCode函数,所以我们不管是刷新页面或者是直接点击图片,这个图形验证码都会经过刷新的。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

损失函数是指什么

损失函数&#xff08;Loss Function&#xff09;是用来衡量模型预测输出与实际目标之间差异的函数。在机器学习和深度学习中&#xff0c;损失函数是模型训练的关键部分。其目标是通过最小化损失函数来使模型的预测尽可能接近实际的标签或目标值。 在监督学习中&#xff0c;模型…

Adobe Media Encoder 2023下载安装教程,ME 2023安装教程,附安装包和工具,无套路,轻松搞的安装

前言 Adobe Media Encoder是一个视频和音频编码应用程序&#xff0c;可让针对不同应用程序和观众&#xff0c;以各种分发格式对音频和视频文件进行编码。包括专门设计的预设设置&#xff0c;以便导出与特定交付媒体兼容的文件&#xff0c;可以按适合多种设备的格式导出视频&am…

漫漫数学之旅010

文章目录 经典格言数学习题古今评注科学家小传&#xff08;一&#xff09;艾伦凯&#xff08;二&#xff09;托马斯C黑尔斯 经典格言 计算机的归宿是融入我们的生活&#xff0c;就像其它一切我们习以为常的东西&#xff1a;手表、纸、铅笔和衣服&#xff0c;我们不再把它们看作…

Hbas简介:数据模型和概念、物理视图

文章目录 说明零 BigTable一 Hbase简介二 HBase 访问接口简介三 行式&列式存储四 HBase 数据模型4.1 HBase 列族数据模型4.2 数据模型的相关概念4.3 数据坐标 五 概念&物理视图 说明 本文参考自林子雨老师的大数据技术原理与应用(第三版)教材内容&#xff0c;仅供学习…

Gen AI大潮来袭!8个Salesforce新岗位,你会选择哪个?

人工智能席卷全球&#xff0c;企业对如何整合GenAI有着浓厚的兴趣。为启动企业的GenAI转型浪潮&#xff0c;Salesforce宣布与埃森哲和德勤建立合作伙伴关系&#xff0c;并计划推出更多支持项目。 目前&#xff0c;Salesforce领域的其他咨询公司正在提高员工技能&#xff0c;以…

Apache Zeppelin结合Apache Airflow使用1

Apache Zeppelin结合Apache Airflow使用1 文章目录 Apache Zeppelin结合Apache Airflow使用1前言一、安装Airflow二、使用步骤1.目标2.编写DAG2.加载、执行DAG 总结 前言 之前学了Zeppelin的使用&#xff0c;今天开始结合Airflow串任务。 Apache Airflow和Apache Zeppelin是两…

C语言数据结构(3)——线性表其二(单链表)

欢迎来到博主的专栏——C语言数据结构 博主id&#xff1a;代码小豪 文章目录 单链表不连续存储的线性表单链表单链表的结构头指针单链表的操作打印单链表 空链表单链表的插入尾插法 头插法 单链表的查找任意位置处的节点插入单链表节点的删除 销毁链表 单链表 顺序表是一个物…

万字长文详解Java线程池面试题

王有志&#xff0c;一个分享硬核 Java 技术的互金摸鱼侠 加入 Java 人的提桶跑路群&#xff1a;共同富裕的Java人 今天是《面霸的自我修养》第 6 篇文章&#xff0c;我们一起来看看面试中会问到哪些关于线程池的问题吧。数据来源&#xff1a; 大部分来自于各机构&#xff08;J…

【K8S】Kubernetes 中滚动发布由浅入深实战

目录 一、Kubernetes中滚动发布的需求背景1.1 滚动发布1.2 滚动发布、蓝绿发布、金丝雀发布的区别 二、Kubernetes中实现滚动发布2.1 定义Kubernetes中的版本2.2 创建 Deployment 资源对象2.2.1 在 Yaml 中定义 Deployment 资源对象2.2.2 执行命令创建 Deployment 资源对象 三、…

Asp.net core 框架入门

概述 appsettings.json&#xff1a;配置文件&#xff0c;数据库连接字符串配置信息 Program.cs&#xff1a;程序入口文件&#xff08;里面有个Main方法&#xff09; Startup.cs&#xff1a;启动配置文件 依赖项&#xff1a;管理项目所依赖的第三方组件的安装&#xff0c;配…

WampServer

开发笔记 推荐链接php无法保存SESSION问题部署SSL时候产生的问题 推荐链接 链接目录 php无法保存SESSION问题 php.ini文件和phpForApache.ini 文件 里面都有 对路径的控制&#xff0c;相关路径问题可能也需要进行修改&#xff0c;打开文件搜索wamp64或wamp 就可以看到了&…

“深入理解RabbitMQ交换机的原理与应用“

深入理解RabbitMQ交换机的原理与应用 引言1. RabbitMQ交换机简介介绍1.1 什么是RabbitMQ&#xff1f;1.1.1 消息中间件的作用1.1.2 RabbitMQ的特点和优势 1.2 RabbitMQ的基本概念1.2.1 队列1.2.2 交换机1.2.3 路由键 1.3 交换机的作用和分类1.3.1 直连交换机&#xff08;direct…

VS Code Json格式化插件-JSON formatter

&#x1f9aa;整个文件格式化 按快捷键Shift Alt F &#x1f96a;仅格式化选择内容 需要选择完整的json段落即&#xff1a;{} 或 [] 括起来的部分&#xff0c;再按快捷键Ctrl K F

社区公益培训系统功能说明

社区公益培训系统功能说明 本系统将用于社区面向居民开展的公益培训课程展示&#xff0c;在线报名&#xff0c;并按班级排课上课&#xff0c;上课时学员要扫码签到&#xff0c;经常旷课的学员将禁止再报名其他课程。 1. 用户注册与登录 - 提供用户注册和登录功能&#xff0c;…

鸿蒙不再兼容安卓,鸿蒙开发薪资高达4w+,程序员是否需转行鸿蒙?

鸿蒙系统的崛起 鸿蒙系统的推出经历了长时间的研发和完善&#xff0c;它是一款自主研发的操作系统&#xff0c;集成了最新的技术和创新理念。该系统具备卓越的安全性、兼容性和扩展性&#xff0c;因此备受关注。最初&#xff0c;鸿蒙系统主要应用于华为手机产品&#xff0c;但…

惬意上手Python —— 装饰器和内置函数

1. Python装饰器 Python中的装饰器是一种特殊类型的函数&#xff0c;它允许用户在不修改原函数代码的情况下&#xff0c;增加或修改函数的行为。 具体来说,装饰器的工作原理基于Python的函数也是对象这一事实&#xff0c;可以被赋值给变量、作为参数传递给其他函数或者作为其他…

比较有创意的网站

有创意的网站通常展示了独特的设计、交互或内容。以下是一些备受赞誉的有创意的网站&#xff0c;你可以参考&#xff1a; Awwwards: Awwwards 是一个评选并展示全球最优秀网站的平台。你可以在这里找到很多有创意的网站设计。 Awwwards CSS Design Awards: 类似于Awwwards&…

3d gaussian splatting笔记(paper部分翻译)

本文为3DGS paper的部分翻译。 基于点的&#x1d6fc;混合和 NeRF 风格的体积渲染本质上共享相同的图像形成模型。 具体来说&#xff0c;颜色 &#x1d436; 由沿射线的体积渲染给出&#xff1a; 其中密度 &#x1d70e;、透射率 &#x1d447; 和颜色 c 的样本是沿着射线以…

VSCode插件 —— Cody AI (免费AI助手!)

之前介绍过一款 阿里云免费的AI开发工具——通义灵码 TONGYI Lingma 本文再推荐一个可以极大提高开发前端开发效率的工具 —— Cody AI &#xff08;Sourcegraph&#xff09;&#xff0c;同样是免费的&#xff01; 不过&#xff0c;使用Cody AI需要有github 或 Google 、 git…

vue3相比vue2的效率提升

1、静态提升 2、预字符串化 3、缓存事件处理函数 4、Block Tree 5、PatchFlag 一、静态提升 在vue3中的app.vue文件如下&#xff1a; 在服务器中&#xff0c;template中的内容会变异成render渲染函数。 最终编译后的文件&#xff1a; 1.静态节点优化 那么这里为什么是两部分…