SpringBoot整合kaptcha实现验证码功能
目录一、引入依赖二、编写配置类三、编写接口四、测试一、引入依赖!--kaptcha依赖包-- dependency groupIdcom.baomidou/groupId artifactIdkaptcha-spring-boot-starter/artifactId version1.1.0/version /dependency二、编写配置类package net.xdclass.config; import com.google.code.kaptcha.Constants; import com.google.code.kaptcha.impl.DefaultKaptcha; import com.google.code.kaptcha.util.Config; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.Properties; Configuration public class CaptchaConfig { /** * 验证码配置 * Kaptcha配置类名 * * return */ Bean Qualifier(captchaProducer) public DefaultKaptcha kaptcha() { DefaultKaptcha kaptcha new DefaultKaptcha(); Properties properties new Properties(); // properties.setProperty(Constants.KAPTCHA_BORDER, yes); // properties.setProperty(Constants.KAPTCHA_BORDER_COLOR, 220,220,220); // //properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_COLOR, 38,29,12); // properties.setProperty(Constants.KAPTCHA_IMAGE_WIDTH, 147); // properties.setProperty(Constants.KAPTCHA_IMAGE_HEIGHT, 34); // properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_SIZE, 25); // //properties.setProperty(Constants.KAPTCHA_SESSION_KEY, code); //验证码个数 properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, 4); // properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_FONT_NAMES, Courier); //字体间隔 properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_SPACE,8); //干扰线颜色 // properties.setProperty(Constants.KAPTCHA_NOISE_COLOR, white); //干扰实现类 properties.setProperty(Constants.KAPTCHA_NOISE_IMPL, com.google.code.kaptcha.impl.NoNoise); //图片样式 properties.setProperty(Constants.KAPTCHA_OBSCURIFICATOR_IMPL, com.google.code.kaptcha.impl.WaterRipple); //文字来源 properties.setProperty(Constants.KAPTCHA_TEXTPRODUCER_CHAR_STRING, 0123456789); Config config new Config(properties); kaptcha.setConfig(config); return kaptcha; } }三、编写接口package net.xdclass.controller; import com.google.code.kaptcha.Producer; import lombok.extern.slf4j.Slf4j; import net.xdclass.service.NotifyService; import net.xdclass.util.JsonData; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.imageio.ImageIO; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.IOException; RestController RequestMapping(/api/account/v1) Slf4j public class NotifyController { Autowired private NotifyService notifyService; Autowired private Producer captchaProducer; RequestMapping(send_code) public JsonData sendCode() { notifyService.testSend(); return JsonData.buildSuccess(); } /** * 生成验证码 * param request * param response */ GetMapping(captcha) public void getCaptcha(HttpServletRequest request, HttpServletResponse response){ String captchaText captchaProducer.createText(); log.info(验证码内容:{},captchaText); //存储redis,配置过期时间 jedis/lettuce //redisTemplate.opsForValue().set(getCaptchaKey(request),captchaText,CAPTCHA_CODE_EXPIRED,TimeUnit.MILLISECONDS); BufferedImage bufferedImage captchaProducer.createImage(captchaText); try (ServletOutputStream outputStream response.getOutputStream()){ ImageIO.write(bufferedImage,jpg,outputStream); outputStream.flush(); } catch (IOException e) { log.error(获取流出错:{},e.getMessage()); } } }四、测试

相关新闻

给老板看的AI能力证明:不止是证书,这3个成果更有效

给老板看的AI能力证明:不止是证书,这3个成果更有效

AI领域的专业能力,核心不在于单纯的证书背书,而在于将认证所学转化为实际价值。CAIE注册人工智能工程师认证(全称Certificated Artificial Intelligence Engineer,中文简称“赛一”)作为核心能力支撑,其体系…

2026/7/4 4:28:18 阅读更多 →
2026最新!降AI率工具 千笔·降AIGC助手 VS 知文AI,继续教育专属利器

2026最新!降AI率工具 千笔·降AIGC助手 VS 知文AI,继续教育专属利器

在AI技术迅速发展的今天,越来越多的学生和研究者开始借助AI工具辅助论文写作,以提升效率和质量。然而,随着学术审查标准的不断升级,AI生成内容的痕迹越来越容易被识别,论文中的“AI率”问题也逐渐成为困扰学术成果的关…

2026/7/6 15:30:27 阅读更多 →
Spring组件扫描原理解析

Spring组件扫描原理解析

Spring组件扫描原理解析 一、概述 用一幅图来对两种方式配置Bean的组件扫描进行一个总结:二、原理剖析 通过之前的学习我们知道只要是将Bean放到了BeanDefinitionMap中,那么就势必会经过Spring的那套Bean的生命周期,就势必会创建Bean。 2.1xm…

2026/7/3 7:05:34 阅读更多 →

最新新闻

会议主题:{{主题}}

会议主题:{{主题}}

会议主题:{{主题}} 【免费下载链接】logseq A privacy-first, open-source platform for knowledge management and collaboration. Download link: http://github.com/logseq/logseq/releases. roadmap: https://logseq.io/p/NX4mc_ggEV 项目地址: https://gitco…

2026/7/6 15:30:26 阅读更多 →
三步搞定跨平台端口转发:bore TCP隧道工具终极指南 [特殊字符]

三步搞定跨平台端口转发:bore TCP隧道工具终极指南 [特殊字符]

三步搞定跨平台端口转发:bore TCP隧道工具终极指南 🚀 【免费下载链接】bore 🕳 bore is a simple CLI tool for making tunnels to localhost 项目地址: https://gitcode.com/gh_mirrors/bo/bore 在现代开发中,你是否经常…

2026/7/6 15:28:25 阅读更多 →
Notepad--:跨平台文本编辑器的三大核心优势与实战应用

Notepad--:跨平台文本编辑器的三大核心优势与实战应用

Notepad--:跨平台文本编辑器的三大核心优势与实战应用 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- 在当…

2026/7/6 15:28:25 阅读更多 →
深度解析:Stability AI生成模型部署的5大实战技巧与问题解决

深度解析:Stability AI生成模型部署的5大实战技巧与问题解决

深度解析:Stability AI生成模型部署的5大实战技巧与问题解决 【免费下载链接】generative-models Generative Models by Stability AI 项目地址: https://gitcode.com/GitHub_Trending/ge/generative-models Stability AI的生成模型套件为开发者和研究人员提…

2026/7/6 15:26:23 阅读更多 →
PyTorch 2.0 深度可分离卷积实战:MobileNet 模块参数量减少 8-9 倍

PyTorch 2.0 深度可分离卷积实战:MobileNet 模块参数量减少 8-9 倍

PyTorch 2.0深度可分离卷积实战:MobileNet模块参数量优化策略 当我们在移动设备上部署深度学习模型时,模型大小和计算效率往往成为关键瓶颈。传统卷积神经网络在参数数量和计算量上的高需求,使得它们在资源受限的环境中难以高效运行。深度可分…

2026/7/6 15:24:23 阅读更多 →
HOScrcpy:鸿蒙开发者必备的远程真机投屏终极解决方案

HOScrcpy:鸿蒙开发者必备的远程真机投屏终极解决方案

HOScrcpy:鸿蒙开发者必备的远程真机投屏终极解决方案 【免费下载链接】鸿蒙远程真机工具 该工具主要提供鸿蒙系统下基于视频流的投屏功能,帧率基本持平真机帧率,达到远程真机的效果。 项目地址: https://gitcode.com/OpenHarmonyToolkitsPl…

2026/7/6 15:24:23 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻