基于SpringBoot+kaptcha的验证码生成

news/2024/12/28 19:06:26/

教程

1.添加 Kaptcha 依赖

在 pom.xml 文件中添加 Kaptcha 依赖:

<dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version>
</dependency>
<!--或者 都是可以的-->
<dependency>
<groupId>com.github.axet</groupId>
<artifactId>kaptcha</artifactId>
<version>0.0.9</version>
</dependency>

2.配置 Kaptcha 参数

2.1在 application.properties 文件中添加 Kaptcha 相关的配置:

# Kaptcha 验证码配置
kaptcha.border=yes
kaptcha.border.color=black
kaptcha.border.thickness=1
kaptcha.textproducer.font.size=30
kaptcha.image.width=120
kaptcha.image.height=40
kaptcha.textproducer.char.space=5
kaptcha.session.key=kaptchaCode
kaptcha.textproducer.char.length=4
kaptcha.textproducer.font.names=Arial, Courier
kaptcha.noise.impl=com.google.code.kaptcha.impl.NoNoise

2.2创建 Kaptcha 配置类

创建一个 Kaptcha 配置类,该类用于配置 Kaptcha 相关参数,并且将其注册为 Spring Bean:

@Configuration
public class KaptchaConfig {@Beanpublic DefaultKaptcha getDefaultKaptcha() {// 生成验证码配置Properties properties = new Properties();properties.setProperty("kaptcha.border", "yes");properties.setProperty("kaptcha.border.color", "black");properties.setProperty("kaptcha.border.thickness", "1");properties.setProperty("kaptcha.textproducer.font.size", "30");properties.setProperty("kaptcha.image.width", "120");properties.setProperty("kaptcha.image.height", "40");properties.setProperty("kaptcha.textproducer.char.space", "5");properties.setProperty("kaptcha.session.key", "kaptchaCode");properties.setProperty("kaptcha.textproducer.char.length", "4");properties.setProperty("kaptcha.textproducer.font.names", "Arial,Courier");properties.setProperty("kaptcha.noise.impl", "com.google.code.kaptcha.impl.NoNoise");Config config = new Config(properties);DefaultKaptcha defaultKaptcha = new DefaultKaptcha();defaultKaptcha.setConfig(config);return defaultKaptcha;}}

3.创建 Controller 层

创建一个用于生成验证码图片的 Controller,并将验证码文本放入 session 中:

@RestController
public class KaptchaController {@Autowiredprivate DefaultKaptcha captchaProducer;@RequestMapping("/kaptcha")public void kaptcha(HttpServletRequest request, HttpServletResponse response) throws Exception {// 定义响应输出类型为图片格式response.setContentType("image/jpeg");// 不缓存响应内容response.setHeader("Cache-Control", "no-store, no-cache");// 获取验证码字符串并将其绑定到 session 中String kaptchaText = captchaProducer.createText();request.getSession().setAttribute("kaptchaCode", kaptchaText);// 生成验证码图片并输出到响应输出流中BufferedImage kaptchaImage = captchaProducer.createImage(kaptchaText);ServletOutputStream servletOutputStream = response.getOutputStream();ImageIO.write(kaptchaImage, "jpg", servletOutputStream);servletOutputStream.flush();servletOutputStream.close();}}

3.1在前端页面展示验证码

在需要展示验证码的地方添加如下代码即可:

<img src="/kaptcha" alt="验证码" onclick="this.src='/kaptcha?'+Math.random()" />

这样点击图片后,会自动刷新当前 URL 对应的验证码图片。

3.2校验验证码

在需要校验验证码的 Controller 方法中,通过 session 获取保存的验证码文本,并与用户输入的验证码进行比对:

@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password,
@RequestParam("kaptcha")String kaptcha, HttpSession session) {// 从 session 中获取验证码文本String kaptchaCode = (String)session.getAttribute("kaptchaCode");// 判断验证码是否正确if (StringUtils.isBlank(kaptcha)|| StringUtils.isBlank(kaptchaCode)|| !kaptcha.equals(kaptchaCode)) {return "验证码错误,请重新输入!";}// 验证码正确,继续登录操作...}

到这里,Spring Boot 实现验证码的过程就完成啦!

总体来说,使用 Kaptcha 工具包可以很方便地实现 Spring Boot 中的验证码功能。

4.演示过程

4.1获取验证码

4.2正确验证验证码

4.3错误验证验证码

5.完善

设置验证码的过期时间

5.1编码的方式

存储的时候存储当前的时间

session.setAttribute("captchaTime", System.currentTimeMillis());

使用的时候比较当前的时间和存储时候的时间。

@RequestMapping("/verify")
public String verify(HttpServletRequest request, String captcha) {// 从 session 中获取验证码值和过期时间信息HttpSession session = request.getSession();String sessionCaptcha = (String) session.getAttribute("captcha");String[] parts = sessionCaptcha.split(":");String sessionCaptchaValue = parts[0];long sessionExpireTime = Long.parseLong(parts[1]);// 比较验证码的值和过期时间if (captcha.equalsIgnoreCase(sessionCaptchaValue)&& System.currentTimeMillis() < sessionExpireTime) {// 验证码正确且未过期,执行相应的业务逻辑// ...return "success"; // 跳转到成功页面} else {// 验证码错误或已过期,返回错误信息// ...return "error"; // 跳转到错误页面}}

过期的提示信息。 


http://www.ppmy.cn/news/488029.html

相关文章

【问题解决】win10修改时间后一直闪屏

问题&#xff1a; 把系统时间改成了 2050 年后屏幕一直闪烁&#xff0c;每次闪烁鼠标和键盘输入都会卡顿&#xff0c;无法正常移动鼠标和输入内容。 windows版本号如下&#xff1a; 解决&#xff1a; 方法一&#xff1a; &#xff08;如果闪屏严重无法输入&#xff0c;请使…

破解版IDM导致电脑反复闪屏的解决方案

破解版IDM导致电脑反复闪屏的解决方案 概括&#xff1a; 进入安全模式&#xff0c;卸载IDM&#xff0c;结束 文章目录 破解版IDM导致电脑反复闪屏的解决方案问题原因解决方式&#xff1a; 问题原因 在使用IDM(Internet Download Manager)的破解版下载文件时突然电脑闪屏&…

linux电脑闪屏是什么原因,电脑显示器突然闪屏是什么原因

不少网友反映说他们的电脑显示器突然闪屏了&#xff0c;这是什么原因呢?下面就由小编来给你们说说电脑显示器突然闪屏的原因及解决方法吧&#xff0c;希望可以帮到你们哦! 电脑显示器突然闪屏的原因分析一 鼠标右击我的电脑&#xff0c;选择管理选项&#xff0c;进入计算机管理…

win10间歇性闪屏_手把手解决win10系统一直闪屏的技巧

有网友给我留言说win10系统一直闪屏的问题给他带来了得多的困惑&#xff0c;即使解决起来很简单&#xff0c;不过有部分网友还是不懂得win10系统一直闪屏终究要如何解决。于是就有一些朋友到本站询问win10系统一直闪屏问题的解决步骤。你只用依照 1、进入设置→更新和安全→恢…

电脑一直刷新闪屏,也许不是Win11的锅。

前几天在用Internet Download Manager&#xff08;一个可以添加到浏览器扩展插件的下载工具&#xff09;下载一个文件时&#xff0c;出了点问题&#xff08;当时没有想到截图&#xff0c;具体报错内容不记得了&#xff09;&#xff0c;然后过了段时间电脑突然开始刷新闪屏了&am…

win7计算机闪屏,win7电脑闪屏是什么原因

一般来说&#xff0c;闪屏和雪花屏主要因为是显卡的问题&#xff0c;那么win7电脑闪屏也是因为显卡的问题吗?下面是学习啦小编精心为你整理的win7电脑闪屏的原因&#xff0c;一起来看看。 win7电脑闪屏的原因 原因一&#xff1a;显卡老化造成的 集成显卡很可能出现屏幕变色的情…

修改注册表导致电脑闪屏,且win+R无效

文章目录 修改注册表导致电脑闪屏&#xff0c;且winR无效Author:LuisTime:2022-04-07Version:v1.0 情景步骤1、点击文件的运行新任务&#xff0c;相当于按键打开了winR2、输入regeditenter,进入注册表编辑器。 修改注册表导致电脑闪屏&#xff0c;且winR无效 Author:Luis Tim…

计算机进到系统闪屏没有桌面,电脑闪屏了?几个步骤可以轻松解决

在使用电脑的时候你有没有遇到过电脑屏幕突然闪屏的情况呢?关于电脑闪屏的现象在日常使用中也常有发生,这种现象一般是我们电脑显示器的显示问题,很多用户都会认为是电脑运行速度太过缓慢的原因,其实并不是这方面原因造成的。造成这方面的原因一般有两个方面,一方面是受周…