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

使用Kaptcha实现的验证码功能

目录

一.需求

二.验证码功能实现步骤

验证码

引入kaptcha依赖

完成application.yml配置文件

浏览器显示验证码

前端页面

登录页面

验证成功页面

后端


此验证码功能是以SpringBoot框架下基于kaptcha插件来实现的。

一.需求

1.页面生成验证码

2.输入验证码,点击提交,验证用户输入的验证码是否正确,正确则进行页面跳转

二.验证码功能实现步骤

1.生成内容(根据词库)

2.生成干扰项

3.二者组成图片,返回

验证码

引入kaptcha依赖

<dependency><groupId>com.oopsguy.kaptcha</groupId><artifactId>kaptcha-spring-boot-starter</artifactId><version>1.0.0-beta-2</version>
</dependency>

完成application.yml配置文件

kaptcha:
#  图片大小image:width: 100height: 60
#  字体text-producer:font:size: 28items:
#    home captchaadmin:path: /admin/captchasession:key: HOME_KAPTCHA_SESSION_KEYdata: HOME_KAPTCHA_SESSION_DATE

浏览器显示验证码

运行:即可在浏览器访问验证码

前端页面

登录页面

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><title>验证码</title><style>#inputCaptcha {height: 30px;vertical-align: middle; }#verificationCodeImg{vertical-align: middle; }#checkCaptcha{height: 40px;width: 100px;}</style>
</head><body><h1>输入验证码</h1><div id="confirm"><input type="text" name="inputCaptcha" id="inputCaptcha"><img id="verificationCodeImg" src="/admin/captcha" style="cursor: pointer;" title="看不清?换一张" /><input type="button" value="提交" id="checkCaptcha"></div><script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script><script>$("#verificationCodeImg").click(function(){$(this).hide().attr('src', '/admin/captcha?dt=' + new Date().getTime()).fadeIn();});$("#checkCaptcha").click(function () {$.ajax({type:"get",url:"/admin/check",data:{captcha:$("#inputCaptcha").val()},success:function(result){if(result){location.href="success.html";}else{alert("验证码错误");}}});});</script>
</body></html>

验证成功页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>验证成功页</title>
</head>
<body><h1>验证成功</h1>
</body>
</html>

后端

package com.lele.demo.controller;import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;
import javax.xml.crypto.Data;
import java.util.Date;@RequestMapping("/admin")
@RestController
public class CaptchaController {private static final String KAPTCHA_SESSION_KEY= "HOME_KAPTCHA_SESSION_KEY";private static final String KAPTCHA_SESSION_DATE="HOME_KAPTCHA_SESSION_DATE";//一分钟60秒,一秒1000毫秒private static final Long SESSION_TIME_OUT=60*1000L;//    1.从session中获取生成的验证码
//    2.对比前端的验证码与session中的是否一样//验证成功返回true 失败返回false@RequestMapping("/check")public Boolean check(String captcha ,HttpSession session){if(!StringUtils.hasLength(captcha)){return false;}//从session中获取验证码String saveCaptcha=(String) session.getAttribute(KAPTCHA_SESSION_KEY);Date saveDate=(Date) session.getAttribute(KAPTCHA_SESSION_DATE);//比对验证码if(captcha.equals(saveCaptcha)){//比对日期if(saveDate==null || System.currentTimeMillis()-saveDate.getTime()<SESSION_TIME_OUT){return true;}return true;}return false;}
}

测试后端代码

实现结果

相关文章:

使用Kaptcha实现的验证码功能

目录 一.需求 二.验证码功能实现步骤 验证码 引入kaptcha依赖 完成application.yml配置文件 浏览器显示验证码 前端页面 登录页面 验证成功页面 后端 此验证码功能是以SpringBoot框架下基于kaptcha插件来实现的。 一.需求 1.页面生成验证码 2.输入验证码&#xff…...

【无标题】CTF之SQLMAP

拿这一题来说 抓个包 复制报文 启动我们的sqlmap kali里边 sqlmap -r 文件路径 --dump --dbs 数据库 --tables 表...

【Qt之Quick模块】1. 概述及Quick应用程序创建流程

概述 Qt的Quick模块是用于创建现代化、动态和响应式用户界面的工具集。它是基于QML&#xff08;Qt Meta-Object Language&#xff09;和JavaScript的。 QML是一种声明性的语言&#xff0c;用于描述用户界面的结构和行为。它使用层叠样式表&#xff08;CSS&#xff09;的语法来…...

C语言-数组指针笔试题讲解(1)-干货满满!!!

文章目录 ▶️1.sizeof和strlen的对比&#x1f4af;➡️1.1 sizeof是什么&#xff1f;&#x1f4af;➡️1.2sizeof用法举例&#x1f4af;▶️1.3strlen是什么&#xff1f;&#x1f4af;▶️1.4 strlen函数用法举例&#xff1a;&#x1f4af;▶️1.5 strlen和sizeof的对比&#…...

springboot整合vue,将vue项目整合到springboot项目中

将vue项目打包后&#xff0c;与springboot项目整合。 第一步&#xff0c;使用springboot中的thymeleaf模板引擎 导入依赖 <!-- thymeleaf 模板 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-t…...

C++ 二叉搜索树(BST)的实现(非递归版本与递归版本)与应用

C 二叉搜索树的实现与应用 一.二叉搜索树的特点二.我们要实现的大致框架三.Insert四.InOrder和Find1.InOrder2.Find 五.Erase六.Find,Insert,Erase的递归版本1.FindR2.InsertR3.EraseR 七.析构,拷贝构造,赋值运算符重载1.析构2.拷贝构造3.赋值运算重载 八.Key模型完整代码九.二…...

分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】

分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】 目录 分类预测 | Matlab实现AOA-SVM算术优化支持向量机的数据分类预测【23年新算法】分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现AOA-SVM算术优化支持向量机的数据分类预测…...

代码随想录算法训练营第七天 | 454.四数相加II、383. 赎金信、15. 三数之和 、18. 四数之和

454.四数相加II 题目链接&#xff1a;454.四数相加II 给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a; 0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0…...

SpringBoot 3.2.0 版本 mysql 依赖下载错误

最近想尝试一下最新的 SpringBoot 项目&#xff0c;于是将自己的开源项目进行了一些升级。 JDK 版本从 JDK8 升级至 JDK17。SpringBoot 版本从 SpringBoot 2.7.3 升级到 SpringBoot 3.2.0 其中 JDK 的升级比较顺利&#xff0c;毕竟 JDK 的旧版本兼容性一直非常好。 但是在升级…...

内网穿透的应用-如何结合Cpolar内网穿透工具实现在IDEA中远程访问家里或者公司的数据库

文章目录 1. 本地连接测试2. Windows安装Cpolar3. 配置Mysql公网地址4. IDEA远程连接Mysql小结 5. 固定连接公网地址6. 固定地址连接测试 IDEA作为Java开发最主力的工具&#xff0c;在开发过程中需要经常用到数据库&#xff0c;如Mysql数据库&#xff0c;但是在IDEA中只能连接本…...

ElasticSearch单机或集群未授权访问漏洞

漏洞处理方法&#xff1a; 1、可以使用系统防火墙 来做限制只允许ES集群和Server节点的IP来访问漏洞节点的9200端口&#xff0c;其他的全部拒绝。 2、在ES节点上设置用户密码 漏洞现象&#xff1a;直接访问9200端口不需要密码验证 修复过程 2.1 生成认证文件 必须要生成…...

【华为OD题库-097】最大岛屿体积-java

题目 题目描述 给你一个由大于0的数&#xff08;陆地)和0(水)组成的的二维网格&#xff0c;请你计算网格中最大岛屿的体积。陆地的数表示所在岛屿的体积。岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假…...

HTML中边框样式、内外边距、盒子模型尺寸计算(附代码图文示例)【详解】

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中边框样式、内外边距、盒子模型尺寸计算以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任何问…...

drf入门规范

一 Web应用模式 在开发Web应用中&#xff0c;有两种应用模式&#xff1a; 1.1 前后端不分离 1.2 前后端分离 二 API接口 为了在团队内部形成共识、防止个人习惯差异引起的混乱&#xff0c;我们需要找到一种大家都觉得很好的接口实现规范&#xff0c;而且这种规范能够让后端写…...

【微服务】springboot整合minio详解

目录 一、前言 二、Minio 概述 2.1 Minio简介 2.1 Minio特点 三、Minio 环境搭建 3.1 部署过程 3.1.1 拉取镜像 3.1.2 启动容器 3.1.3 访问web页面 四、Minio基本使用 4.1 基本概念 4.2 上传文件演示 4.3 用户管理 4.4 Java操作Minio 4.4.1 导入依赖 4.4.2 上传…...

减速机振动相关标准 - 笔记

参考标准&#xff1a;国家标准|GB/T 39523-2020 减速机的振动标准与发动机不同&#xff0c;摘引&#xff1a; 原始加速度传感器波形 可以明显看到调幅波 它的驱动电机是300Hz~2000Hz范围的。这个采样时间是5秒&#xff0c;看分辨率至少1024线。可分出500条谱线。 频谱部分 …...

【matlab】MATLAB 中的标量运算及实例

MATLAB 中的标量运算及实例 引言 在 MATLAB 中,标量是指只包含单个数值的变量或常量。尽管标量运算可能看似简单,但它在数值计算、数据处理和算法设计中扮演着重要的角色。本文将深入探讨 MATLAB 中的标量运算,介绍其基本操作和一些实例应用。 1. 标量运算的基本操作 标…...

java简易制作-王者荣耀游戏

一.准备工作 首先创建一个新的Java项目命名为“王者荣耀”&#xff0c;并在src下创建两个包分别命名为“com.sxt"、”com.stx.beast",在相应的包中创建所需的类。 创建一个名为“img”的文件夹来储存所需的图片素材。 二.代码呈现 package com.sxt; import javax…...

手撕分布式缓存---多节点的调取

经过上一个章节的学习&#xff0c;我们已经知晓了如何搭建了HTTP Server&#xff0c;通过HTTP协议与我们定义的路由&#xff0c;我们可以远程访问这个节点&#xff1b;基于这一点&#xff0c;我们可以部署多台实现了HTTP的缓存服务从而实现分布式的特性。这一章节我们要基于此背…...

C/C++编程中的算法实现技巧与案例分析

C/C编程语言因其高效、灵活和底层的特性&#xff0c;被广大开发者用于实现各种复杂算法。本文将通过10个具体的算法案例&#xff0c;详细探讨C/C在算法实现中的技巧和应用。 一、冒泡排序&#xff08;Bubble Sort&#xff09; 冒泡排序&#xff08;Bubble Sort&#xff09;是一…...

SeqGPT-560M智能客服问答系统部署指南

SeqGPT-560M智能客服问答系统部署指南 1. 引言 想象一下这样的场景&#xff1a;你的电商平台每天收到上千条客户咨询&#xff0c;从"这个衣服有货吗"到"怎么申请退货"&#xff0c;问题五花八门。传统客服需要一个个手动回复&#xff0c;效率低下还容易出…...

LeetCode 111. Minimum Depth of Binary Tree 题解

LeetCode 111. Minimum Depth of Binary Tree 题解 题目描述 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 叶子节点 是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输…...

Qwen3-ForcedAligner-0.6B在字幕制作中的落地应用:SRT自动导出全流程

Qwen3-ForcedAligner-0.6B在字幕制作中的落地应用&#xff1a;SRT自动导出全流程 1. 引言&#xff1a;告别手动打轴&#xff0c;让字幕制作快10倍 如果你做过视频字幕&#xff0c;一定体会过手动打轴的痛苦。一集45分钟的视频&#xff0c;台词稿早就准备好了&#xff0c;但你…...

ctfshow-web进阶-命令执行绕过技巧(web71-web74)

1. 命令执行漏洞基础与CTF常见场景 命令执行漏洞&#xff08;Command Execution&#xff09;是Web安全中一种高危漏洞&#xff0c;它允许攻击者在服务器上执行任意系统命令。在CTF比赛中&#xff0c;这类题目通常会模拟真实环境中开发者未对用户输入进行严格过滤的场景。 我刚开…...

突破语音转换技术瓶颈:Retrieval-based Voice Conversion全平台实战指南

突破语音转换技术瓶颈&#xff1a;Retrieval-based Voice Conversion全平台实战指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-ba…...

WubiUEFI终极指南:如何在Windows中零风险安装Ubuntu系统

WubiUEFI终极指南&#xff1a;如何在Windows中零风险安装Ubuntu系统 【免费下载链接】wubiuefi fork of Wubi (https://launchpad.net/wubi) for UEFI support and for support of recent Ubuntu releases 项目地址: https://gitcode.com/gh_mirrors/wu/wubiuefi 你是否…...

CasADi实战:用Python搞定机器人路径规划中的数值优化问题(附IPOPT配置)

CasADi实战&#xff1a;用Python搞定机器人路径规划中的数值优化问题&#xff08;附IPOPT配置&#xff09; 机器人路径规划的核心在于如何在复杂环境中找到一条既安全又高效的轨迹。这本质上是一个带约束的数值优化问题——我们需要最小化某种代价函数&#xff08;如路径长度或…...

免费开源Sunshine游戏串流服务器终极指南:打造你的专属云游戏平台

免费开源Sunshine游戏串流服务器终极指南&#xff1a;打造你的专属云游戏平台 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 想要在任何设备上畅玩PC游戏&#xff0c;却受限于硬件…...

【Python并发革命】:GIL解除后首个生产级无锁插件生态正式开放下载(限时72小时)

第一章&#xff1a;Python并发革命的里程碑意义 Python 并发模型的演进并非渐进式改良&#xff0c;而是一场深刻重塑编程范式的革命。从早期依赖线程与锁的阻塞式模型&#xff0c;到 asyncio 的异步 I/O 抽象、async/await 语法糖的引入&#xff0c;再到结构化并发&#xff08;…...

AI辅助开发:模仿PS创意效果,用快马生成智能艺术风格迁移应用代码

最近在做一个艺术风格迁移的小项目&#xff0c;正好用到了InsCode(快马)平台的AI辅助开发功能&#xff0c;整个过程特别顺畅。这个项目的灵感来源于PS的创意效果&#xff0c;但想用更智能的方式来实现类似功能。下面分享一下我的实现思路和经验。 项目构思 最初是想做一个能让普…...