当前位置: 首页 > article >正文

【JavaEE进阶】验证码案例

🌲实现说明

🎄Hutool介绍

🌳准备工作

🌴约定前后端交互接口

🚩接口定义

🚩实现服务器后端代码

🚩前端代码

🚩整体测试


🌲实现说明

随着安全性的要求越来越⾼,⽬前项⽬中很多都使⽤了验证码,验证码的形式也是多种多样,更复杂的图形验证码和⾏为验证码已经成为了更流⾏的趋势

验证码的实现⽅式很多,可以前端实现,也可以后端实现.⽹上也有⽐较多的插件或者⼯具包可以使⽤, 咱们选择使⽤Hutool提供的⼩⼯具来实现

🎄Hutool介绍

咱们课程中验证码的实现,使⽤Hutool提供的⼩⼯具来实现

Hutool是⼀个Java⼯具包类库,对⽂件、流、加密解密、转码、正则、线程、XML等JDK⽅法进⾏封 装,组成各种Util⼯具类

Hutool是⼀个⼩⽽全的Java⼯具类库,通过静态⽅法封装,降低相关API的学习成本,提⾼⼯作效 率,使Java拥有函数式语⾔般的优雅,让Java语⾔也可以"甜甜的"

Hutool官⽹: https://hutool.cn/

Hutool参考⽂档: https://hutool.cn/docs/#/

Hutool源码: GitHub - dromara/hutool: 🍬A set of tools that keep Java sweet.

我们不需要知道这个工具中实现这些功能的代码是如何实现的,我们只需要调用它的API即可。

使用方法:

  • 第一步:导包,需要什么就导什么包,也可导入该工具中所有的包(此处就导验证码的包)
  • 第二步:查看验证码接口,实现类,方法介绍说明
  • 第三步:查看代码及注释(部分代码实现,具体各种验证码查看官网)
  • 第四步:代码具体实现
  • 运行项目,发送请求,查看line.png文件;后端还打印了该验证码,此处不在展示

小结:Hutool工具有各种各样的验证码,以及实现方法,当前不在一一展示,可自行浏览官网。

🌳准备工作

界⾯如下图所⽰

1. ⻚⾯⽣成验证码

2. 输⼊验证码,点击提交,验证⽤⼾输⼊验证码是否正确,正确则进⾏⻚⾯跳转

创建项⽬,引⼊SpringMVC的依赖包,把前端⻚⾯放在项⽬中

index.html代码如下:

success.html代码如下:

前端代码验证:

🌴约定前后端交互接口

🚩接口定义

接口一:生成验证码

请求:

GET /captcha/get

响应:图片内容

浏览器给服务器发送⼀个 GET /captcha/get 这样的请求,服务器返回⼀个图⽚,浏览器显⽰在⻚⾯上

接口二:校验验证码是否正确

请求: 

/cpatcha/check

响应:

true/false

根据⽤⼾输⼊的验证码,校验验证码是否正确true:验证成功.false:验证失败

🚩实现服务器后端代码

首先在pom文件中引入依赖

图片生成代码:

测试:

由于我们学习了SpringBoot的配置,我们可以把图片的高度和宽度放在配置中

代码:

验证码校验:

注意:若使用Hutool工具中的接口来校验验证码的话,就需要把上述图片生成代码中的ICaptcha接口提到成员变量上,但是这只适用于单线程的时候,若是多线程的情况下,用多个客户端访问时只有这一个对象,那很显然是不合适的,所以这个方法是不适合的。

此时就可以借助前面学习的Session了,既然有不同的客户端,我们就可以通过Session来进行存储,每个客户端存储的是自己的Session,即在校验的时候,我们取的是自己的Session信息

代码:

测试:

生成验证码:

正确校验验证码:

错误校验验证码:

🚩前端代码

通过ajax请求数据

代码:

🚩整体测试

正确校验:

错误校验:

相关文章:

【JavaEE进阶】验证码案例

目 🌲实现说明 🎄Hutool介绍 🌳准备工作 🌴约定前后端交互接口 🚩接口定义 🚩实现服务器后端代码 🚩前端代码 🚩整体测试 🌲实现说明 随着安全性的要求越来越⾼…...

TCP/UDP 简介,三次握手与四次挥手

一、TCP 三次握手 目的:为了解决在不可靠的信道上建立可靠的网络连接 三次握手是连接请求的过程: A 发送连接请求的数据给 B(发送 SYN 包) B 同意连接,返回数据给 A(返回 SYNACK 包) A 收到后回…...

C++之线程池(Thread Pool)

1.介绍 线程池是一种并发编程的设计模式,用于管理和复用多个线程。以避免频繁创建和销毁线程的开销。线程池的核心思想是预先创建一组线程,并将任务分配给这些线程执行,从而提高程序的性能和资源利用率。 2.线程池的核心组件 一个经典的线程…...

Django中实现简单易用的分页工具

如何在Django中实现简单易用的分页工具?📚 嗨,小伙伴们!今天我们来看看如何在 Django 中实现一个超简单的分页工具。无论你是在处理博客文章、产品列表,还是用户评论,当数据量一大时,分页显得尤…...

【kafka系列】Exactly Once语义

目录 1. Exactly-Once语义的定义 2. Kafka实现Exactly-Once的机制 3. 端到端Exactly-Once示例 场景描述 3.1 生产者配置与代码 3.2 消费者配置与代码 4. 异常场景与Exactly-Once保障 场景1:生产者发送消息后宕机 场景2:消费者处理消息后宕机 场…...

export default与export区别

1.定义: export default‌:用于导出模块中的默认成员。一个模块中只能有一个export default,通常用于导出模块的主要功能或对象。导入时可以使用任意名称,因为它没有具体的名称‌ ‌export‌:用于导出模块中的多个成…...

Qt Creator 5.0.2 (Community)用久了突然变得很卡

目录 1.现象 2.解决方案 1.现象 很久没有用Qt Creator开发项目了,刚刚结束的项目又是用VS2019开发的;这两天刚好有时间去学习一下Qt,刚好要用Qt Creator,结果一打开就没反应,主界面显示出来要好几分钟,最…...

Windows搭建CUDA大模型Docker环境

Windows搭建CUDA大模型Docker环境 一、安装Docker二、拉取镜像三、启动容器四、安装依赖环境五、安装Miniconda3六、设置pip源地址 一、安装Docker windows中docker安装教程 二、拉取镜像 系统:Ubuntu20.04CUDA版本:11.8.0 docker pull nvcr.io/nvid…...

阅读论文笔记《Efficient Estimation of Word Representations in Vector Space》

这篇文章写于2013年,对理解 word2vec 的发展历程挺有帮助。 本文仅适用于 Word2Vect 的复盘 引言 这篇论文致力于探索从海量数据中学习高质量单词向量的技术。当时已发现词向量能保留语义特征,例如 “国王 - 男人 女人≈女王”。论文打算借助该特性&am…...

初学PADS使用技巧笔记(也许会继续更新)

操作意图:网上找某个芯片封装又不想自己画,再加上没经验,怎么办? 就以AC-DC芯片PN8036为例,打开嘉立创的的DFM,打开立创商城,输入PN8036,点击数据手册,然后点击直接打开…...

C#学习之数据转换

目录 一、创作说明 二、数据类型之间的转换 1.数据类型之间的转换表格 2.代码示例 三、进制之间的转换 1.进制之间的转换表格 2.代码示例 四、ASCII 编码和字符之间的转换 1.ASCII 编码和字符之间的转换表格 2.代码示例 五、总结 一、创作说明 C#大多数时候都是和各…...

从无序到有序:上北智信通过深度数据分析改善会议室资源配置

当前企业普遍面临会议室资源管理难题,预约机制不完善和临时会议多导致资源调度不合理,既有空置又有过度拥挤现象。 针对上述问题,上北智信采用了专业数据分析手段,巧妙融合楼层平面图、环形图、折线图和柱形图等多种可视化工具&a…...

JavaScript 中toLocaleString()的基本用法

toLocaleString() 是 JavaScript 中多个内置对象(如 Number、Date、Array 等)都拥有的方法,其作用是将对象的值转换为符合特定语言环境的字符串表示形式。下面分别介绍不同对象使用该方法的具体用法。 1. Number.prototype.toLocaleString()…...

CAS单点登录(第7版)4.管理

如有疑问,请看视频:CAS单点登录(第7版) 管理 概述 Admin Console & 仪表板 CAS 提供了许多可用于管理 CAS 服务器部署的工具和控制板。此类选项通常不是互斥的,旨在协同工作并呈现 CAS 配置和构建的各个方面&am…...

Baklib一站式云平台:全场景赋能企业知识资产激活

内容概要 在数字化浪潮推动下,企业知识资产的高效管理与价值释放成为核心议题。Baklib作为一站式云平台,以全场景赋能为核心定位,通过构建知识中台架构,为企业提供从资源整合到应用落地的闭环解决方案。该平台不仅支持文本、图像…...

登录弹窗效果

1,要求 点击登录按钮,弹出登录窗口 提示1:登录窗口 display:none 隐藏状态; 提示2:登录按钮点击后,触发事件,修改 display:block 显示状态 提示3:登录窗口中点击关闭按钮&#xff0…...

文本表示方法

词向量 独热编码模型和分布式表征模型 独热编码分布式表征固定长度的稠密词向量优点一个单词一个维度,彼此之间构成标准正交向量组数字化后的数值可以表示语义上的关系缺点稀疏,词向量维度大导致计算效率低 独热编码会根据语料库中的单词个数,来确定词…...

小小小病毒(3)(~_~|)

一分耕耘一分收获 声明: 仅供损害电脑,不得用于非法。损坏电脑,作者一律不负责。此作为作者原创,转载请经过同意。 欢迎来到小小小病毒(3) 感谢大家的支持 还是那句话:上代码! …...

微软AutoGen高级功能——Memory

介绍 大家好,博主又来给大家分享知识了。这次又要给大家分享什么呢?哈哈。这次要给大家分享的是微软AutoGen框架的高级且重要的功能:Memory。在微软AutoGen中,Memory(记忆)是一个重要概念,它主要用于存储和管理智能体…...

Debezium系列之:时区转换器,时间戳字段转换到指定时区

Debezium系列之:时区转换器,时间戳字段转换到指定时区 示例:基本配置应用TimezoneConverter SMT的效果示例:高级配置配置选项当Debezium发出事件记录时,记录中的时间戳字段的时区值可能会有所不同,这取决于数据源的类型和配置。为了在数据处理管道和应用程序中保持数据一…...

【Java 面试 八股文】Spring Cloud 篇

Spring Cloud 篇 1. Spring Cloud 5大组件有哪些?2. 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?3. 我看你之前也用过nacos,你能说下nacos与eureka的区别?4. 你们项目负载均衡如何实现的&#xff1f…...

Esxi8.0设置nvidia显卡直通安装最新驱动

ESXI8.0设置显卡直通 在某些情况下,我们需要多次切换操作系统,以测试软件是否适用于特定系统和环境,减少多次重装系统的麻烦 ESXI8.0安装包 通过网盘分享的文件:ESXi-8.0U2-22380479-USB-NVME-集成网卡镜像.iso 链接: https://…...

LabVIEW袜品压力测试系统

开发了一种基于LabVIEW开发的袜品压力测试系统。该系统利用LabVIEW并结合灵敏的传感器和高精度的处理模块,实现了对袜品压力的精确测量和分析。系统不同于传统的服装压力测试方法,为研究和评价袜子的舒适性提供了新的测试手段。 ​ 项目背景 该系统的…...

TestHubo基础教程-创建项目

TestHubo是一款国产开源一站式测试工具,涵盖功能测试、接口测试、性能测试,以及 Web 和 App 测试,可以满足不同类型项目的测试需求。本文将介绍如何快速创建第一个项目,以快速入门上手。 1、创建项目 在 TestHubo 中,…...

3.3 企业级AI Agent工程实践:从API设计到高可用架构的全栈开发指南

企业级AI Agent工程实践:从API设计到高可用架构的全栈开发指南 引言:AI Agent开发中的工程化挑战 据2024年DevOps状态报告,AI Agent项目的失败案例中**61%**源于工程实现缺陷。本文将基于GitHub Sentinel的实战案例,揭示如何构建支持百万级请求的工业级Agent系统,涵盖AP…...

解锁二进制数组:JS、TS、ArkTS 解析

二进制数组基础入门 在编程的世界里,二进制数组就像是一把隐藏的钥匙,虽然不常被提及,但却在许多关键领域发挥着至关重要的作用。从计算机的底层硬件到前端的高性能计算,二进制数组都有着广泛的应用。 在计算机科学中&#xff0…...

C# windowForms 的DataGridView控件的使用

C# Windows Forms DataGridView 控件使用详解 DataGridView 是 Windows Forms 中用于显示和编辑表格数据的核心控件。它支持高度自定义的列类型、数据绑定、事件处理和丰富的样式配置。以下是其详细使用方法。 目录 基础使用 数据绑定 列类型与自定义...

深度求索—DeepSeek API的简单调用(Java)

DeepSeek简介 DeepSeek(深度求索)是由中国人工智能公司深度求索(DeepSeek Inc.)研发的大规模语言模型(LLM),专注于提供高效、智能的自然语言处理能力,支持多种场景下的文本生成、对…...

企业使用统一终端管理(UEM)工具提高端点安全性

什么是统一终端管理(UEM) 统一终端管理(UEM)是一种从单个控制台管理和保护企业中所有端点的方法,包括智能手机、平板电脑、笔记本电脑、台式机和 IoT设备。UEM 解决方案为 IT 管理员提供了一个集中式平台,用于跨所有作系统和设备类型部署、配置、管理和…...

Vue.js 响应式原理与数据绑定

在 Vue.js 中,响应式系统是其核心特性之一,它使得数据的变化能够自动更新到 DOM 上,实现了数据和视图的双向绑定。下面详细介绍 Vue.js 响应式系统的原理以及它是如何实现数据绑定的。 原理概述 Vue.js 的响应式系统主要基于 JavaScript 的…...