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

SpringBoot整合kaptcha实现验证码功能

目录

一、引入依赖

二、编写配置类

三、编写接口

四、测试


一、引入依赖

<!--kaptcha依赖包--> <dependency> <groupId>com.baomidou</groupId> <artifactId>kaptcha-spring-boot-starter</artifactId> <version>1.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()); } } }

四、测试

http://www.jsqmd.com/news/384438/

相关文章:

  • 2026年知名的智能系统门窗/金属门窗厂家推荐与选购指南 - 品牌宣传支持者
  • 城南核心现房交付实景,2026年置业优选指南,新楼盘/南都新城/新房/70年产权住宅/婚房/现房/婚房,现房机构有哪些 - 品牌推荐师
  • 2026年知名的湿电子化学品/电镀液电子化学品厂家实力参考 - 品牌宣传支持者
  • 【RT-DETR涨点改进】全网独家复现、特征融合改进篇| CVPR 2025| 引入MEPF掩膜增强像素级融合模块,高效融合浅层特征与深层特征,含多种创新,助力遥感小目标检测、图像分割、分类,高效涨点
  • 2026年比较好的空间钢结构/大型车间钢结构行业内口碑厂家推荐 - 品牌宣传支持者
  • 零基础学AI大模型之LLM存储优化:大量QA与长对话问题实战深度解析:原理、实战与踩坑记录
  • 2026年比较好的精密仪器基座/foundation基座优质厂家推荐汇总 - 品牌宣传支持者
  • 2026年口碑好的主动防微振平台/高精度防微振平台厂家选择参考建议 - 品牌宣传支持者
  • 2026最新!降AI率工具 千笔·降AIGC助手 VS 知文AI,继续教育专属利器
  • 2026年质量好的零食烤虾/年货烤虾高评分品牌推荐(畅销) - 品牌宣传支持者
  • 在AI技术唾手可得的时代,挖掘用户真正想要的需求才是关键——一款App Store热门榜单顶部导航组件的用户呼声分析
  • UVA1389 Hard Life
  • AI工具泛滥?给你一个清晰的学习优先级排序
  • 《实时渲染》第3章-图形处理单元-3.5顶点着色器
  • 2026年市面上专业的升降机公司排名,自行走升降机/装卸平台/防爆升降平台/液压升降机/装车平台,升降机工厂如何选 - 品牌推荐师
  • 给老板看的AI能力证明:不止是证书,这3个成果更有效
  • 2026年正规的上海GEO品牌/上海GEO推广综合推荐公司 - 品牌宣传支持者
  • 2026年市面上评价高的安检门生产厂家哪家好,安检仪/金属探测门/智能安检/安检门/安检设备,安检门源头厂家找哪家 - 品牌推荐师
  • 2026年正规的常熟GEO推广/常熟GEO优化市场口碑推荐公司 - 品牌宣传支持者
  • 2026有哪些口碑好的大件物流厂家?一文知晓,大件运输/大件物流,大件物流公司排行 - 品牌推荐师
  • 2026年靠谱的张家港GEO网站/张家港GEO营销行业参考推荐公司 - 品牌宣传支持者
  • 何友院士《人工智能发展前沿》全景解读:从理论基石到产业变革 - 实践
  • G120C自由报文999编程案例:可复用的变频器控制秘籍
  • 2026年正规的太仓GEO网站/太仓GEO优化用户认可推荐公司 - 品牌宣传支持者
  • 2026年靠谱的张家港网站设计/张家港做网站优选服务推荐企业 - 品牌宣传支持者
  • 2026年靠谱的常熟官网建设/常熟外贸网站经验丰富推荐企业 - 品牌宣传支持者
  • doubaoAD.com是做什么的公司? - 品牌2025
  • node PM2 常用命令使用
  • 新手也能上手 10个降AIGC平台测评:专科生降AI率必备攻略
  • node js 性能处理