验证码生成--kaptcha

验证码生成与点击重新获取验证码

如图所示,本文档仅展示了验证码的生成和刷新显示。

1. 概述

系统通过生成随机验证码图像和文本。

2. 代码分析

2.1. Maven依赖
xml 复制代码
<dependency>
	<groupId>com.github.penggle</groupId>
	<artifactId>kaptcha</artifactId>
	<version>2.3.2</version>
</dependency>
  • 作用:引入kaptcha库,用于生成验证码图像。
2.2. CaptchaController
java 复制代码
@Controller
public class CaptchaController {

    // 处理首页请求,生成验证码图像并返回页面
    @GetMapping("/")
    public String index(HttpSession session, Model model) throws IOException {
        // 生成验证码图像
        byte[] captchaImageBytes = CaptchaUtil.generateCaptchaImage(session);
        // 将验证码图像转换为Base64编码字符串
        String captchaImageBase64String = Base64.getEncoder().encodeToString(captchaImageBytes);
        // 从会话中获取验证码文本
        String captchaText = session.getAttribute("captchaText").toString();
        // 将验证码图像和文本添加到模型中
        model.addAttribute("captchaImage", captchaImageBase64String);
        model.addAttribute("captchaText", captchaText);
        // 返回首页模板
        return "index";
    }

    // 处理获取验证码请求,返回验证码图像和文本
    @GetMapping("/getCaptcha")
    @ResponseBody
    public R getCaptcha(HttpSession session) throws IOException {
        // 生成验证码图像
        byte[] captchaImageBytes = CaptchaUtil.generateCaptchaImage(session);
        // 从会话中获取验证码文本
        String captchaText = session.getAttribute("captchaText").toString();
        // 返回JSON格式数据,包含验证码图像和文本
        return R.ok().put("captchaImageBytes", captchaImageBytes).put("captchaText", captchaText);
    }
}
  • 作用:CaptchaController处理与验证码相关的HTTP请求。
  • index方法 :
    • GET请求"/":生成验证码图像,并将图像的Base64编码字符串和验证码文本添加到模型中,最后返回到前端页面。
  • getCaptcha方法 :
    • GET请求"/getCaptcha":与index方法类似,生成验证码图像并返回其Base64编码字符串和验证码文本,但以JSON格式返回给前端页面。
2.3. 前端页面
html 复制代码
<body>
  <!-- 显示验证码图像 -->
  <img id="captchaImg" th:src="'data:image/jpeg;base64,' + ${captchaImage}" alt="Mountains" style="width:100px;height:50px;">
  <!-- 显示验证码文本 -->
  <h2 id="captchaText" th:text="${captchaText}"></h2>
</body>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
  var captchaImg = document.getElementById("captchaImg");
  var captchaText = document.getElementById("captchaText");
  captchaImg.addEventListener("click", function () {
    // 点击验证码图像时,发送GET请求获取新的验证码
    $.ajax({
      url: "/getCaptcha",
      type: "GET",
      success: function (data) {
        // 更新验证码图像和文本
        captchaImg.src = "data:image/png;base64," + data.captchaImageBytes;
        captchaText.innerHTML = data.captchaText;
      }
    });
  })
</script>
  • 作用:前端页面通过Thymeleaf模板引擎渲染验证码图像和文本,使用jQuery监听验证码图像的点击事件。
  • 点击事件:当验证码图像被点击时,通过AJAX请求"/getCaptcha"获取新的验证码图像和文本,并更新到页面上。

3. 总结

验证码生成与验证系统通过后端生成验证码图像和文本,并通过前端页面呈现给用户。本文档展示了验证码的生成和刷新显示。

4.源码 源码git

相关推荐
她说彩礼65万4 分钟前
C语言 assert
java·linux·c语言
vx-程序开发6 分钟前
【计算机毕设】52744基于微信小程序的民宿智能预订系统
java·spring boot·毕业设计·源码·课程设计·毕设·大作业
Wang's Blog35 分钟前
Java框架 SpringCloud 快速入门: Eureka 服务注册
java·spring cloud·eureka
liangshanbo121539 分钟前
请求拦截器相关面试题
java·前端·javascript
她说彩礼65万43 分钟前
C语言 const的使用
java·服务器·c语言
开开心心就好1 小时前
视频压缩工具推荐,绿色版免安装双击即用
java·前端·人工智能·spring·智能手机·intellij-idea·excel
Wang's Blog1 小时前
Java框架 SpringCloud 快速入门: Eureka 注册中心的搭建
java·spring cloud·eureka
专业程序开发源1 小时前
springboot古城景区管理系统88564-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·spring·php·课程设计
泡茶喝茶写代码1 小时前
A股量化数据工程:从 REST 接口到策略信号(第 7 篇):盈利能力因子:毛利率、净利率与 ROE
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
小蒜学长1 小时前
基于微信小程序的遇见咖啡店点餐系统设计与实现(代码+数据库+LW)
java·spring boot·后端·微信小程序·咖啡店点餐系统