Java后端快速生成验证码

Hutool是一个小而全的Java工具类库,它提供了很多实用的工具类,包括但不限于日期处理、加密解密、文件操作、反射操作、HTTP客户端等。

核心工具类:CaptchaUtil,CaptchaUtil 是 Hutool 提供的一个工具类,用于创建各种类型的验证码。它提供了静态工厂方法,帮助我们快速生成不同风格的验证码。

POM依赖

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.3</version>
</dependency>

CaptchaUtil

package cn.hutool.captcha;/*** 图形验证码工具*/
public class CaptchaUtil {/*** 创建线干扰的验证码,默认5位验证码,150条干扰线* @param width  图片宽* @param height 图片高*/public static LineCaptcha createLineCaptcha(int width, int height) {return new LineCaptcha(width, height);}/*** 创建线干扰的验证码* @param width     图片宽* @param height    图片高* @param codeCount 字符个数* @param lineCount 干扰线条数*/public static LineCaptcha createLineCaptcha(int width, int height, int codeCount, int lineCount) {return new LineCaptcha(width, height, codeCount, lineCount);}/*** 创建圆圈干扰的验证码,默认5位验证码,15个干扰圈* @param width  图片宽* @param height 图片高*/public static CircleCaptcha createCircleCaptcha(int width, int height) {return new CircleCaptcha(width, height);}/*** 创建圆圈干扰的验证码* @param width       图片宽* @param height      图片高* @param codeCount   字符个数* @param circleCount 干扰圆圈条数*/public static CircleCaptcha createCircleCaptcha(int width, int height, int codeCount, int circleCount) {return new CircleCaptcha(width, height, codeCount, circleCount);}/*** 创建扭曲干扰的验证码,默认5位验证码* @param width  图片宽* @param height 图片高*/public static ShearCaptcha createShearCaptcha(int width, int height) {return new ShearCaptcha(width, height);}/*** 创建扭曲干扰的验证码,默认5位验证码* @param width     图片宽* @param height    图片高* @param codeCount 字符个数* @param thickness 干扰线宽度*/public static ShearCaptcha createShearCaptcha(int width, int height, int codeCount, int thickness) {return new ShearCaptcha(width, height, codeCount, thickness);}/*** 创建GIF验证码* @param width 宽* @param height 高*/public static GifCaptcha createGifCaptcha(int width, int height) {return new GifCaptcha(width, height);}/*** 创建GIF验证码* @param width 宽* @param height 高* @param codeCount 字符个数*/public static GifCaptcha createGifCaptcha(int width, int height, int codeCount) {return new GifCaptcha(width, height, codeCount);}
}

前端页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>登录</title>
</head>
<body><form action="/login" method="post">用户名:<input type="text" name="username"><br>密码:<input type="password" name="password"><br>验证码:<input type="text" name="verificationCode"><img src="/verification-code/getImage"><input type="submit" value="登录"></form>
</body>
</html>

后端代码

@Controller
@RequestMapping("/verification-code")
@Slf4j
public class VerificationCodeController {@GetMapping("/getImage")public void generateCaptcha(HttpServletRequest request, HttpServletResponse response) throws IOException {// 1. 生成验证码图片// 图片宽:90 图片高:30 字符个数:4 干扰线宽度:3ICaptcha captcha = CaptchaUtil.createShearCaptcha(90, 30, 4, 3);// 2. 将生成的验证码(文本)保存到 Redis / Session 中// 存入Redis / Session后,在后续可通过拦截器进行校验request.getSession().setAttribute("verificationCode", captcha.getCode());// 3. 设置响应类型为 JPEG 图片response.setContentType("image/jpeg");// 4. 回写captcha.write(response.getOutputStream());}
}

验证码效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/82916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql 备份表a数据到表b

备份表a数据到表b mysql CREATE TABLE sys_dict_240702 LIKE sys_dict;INSERT INTO sys_dict_240702 SELECT * FROM sys_dict;mssql select * into t_Dict_240702 from t_Dict

2.4GHz无线通信芯片选型指南:集成SOC与低功耗方案解析

今天给大家分享几款2.4GHz无线通信芯片方案&#xff1a; 一、集成SOC芯片方案 XL2407P&#xff08;芯岭技术&#xff09; 集成射频收发机和微控制器&#xff08;如九齐NY8A054E&#xff09; 支持一对多组网和自动重传 发射功率8dBm&#xff0c;接收灵敏度-96.5dBm&#xff08…

Tomcat与纯 Java Socket 实现远程通信的区别

Servlet 容器​​&#xff08;如 Tomcat&#xff09; 是一个管理 Servlet 生命周期的运行环境&#xff0c;主要功能包括&#xff1a; ​​协议解析​​&#xff1a;自动处理 HTTP 请求/响应的底层协议&#xff08;如报文头解析、状态码生成&#xff09;&#xff1b; ​​线程…

[超级简单]讲解如何用PHP实现LINE Pay API!

在 PHP 中实现 LINE Pay API 之前我应该​​做哪些准备&#xff1f;如何在 PHP 中实现 LINE Pay API&#xff1f; 目录 [前提] 环境使用 PHP 实现 LINE Pay API 的准备工作使用 PHP 实现 LINE Pay API概括 [前提] 环境 这次我们将使用SandBox环境&#xff08;测试环境&a…

centos7.x下,使用宝塔进行主从复制的原理和实践

操作原理&#xff1a; 一、主库配置 1.修改 MySQL 配置文件 # 编辑主库配置文件&#xff08;路径根据实际系统可能不同&#xff09; vim /etc/my.cnf # 添加以下配置 [mysqld] server-id 1 # 唯一 ID&#xff0c;主库设置为 1 log-bin mysql-bin …

从零实现基于Transformer的英译汉任务

1. model.py&#xff08;用的是上一篇文章的代码&#xff1a;从0搭建Transformer-CSDN博客&#xff09; import torch import torch.nn as nn import mathclass PositionalEncoding(nn.Module):def __init__ (self, d_model, dropout, max_len5000):super(PositionalEncoding,…

c#建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能

# financial_建筑行业 建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能 # 开发背景 软件是给岳阳客户定制开发一款建筑行业流水账财务软件。提供工程签证单、施工日志、人员出勤表等信息记录。 # 财务管理系统功能描述 1.可以自行设置记账科目&#xff0c;做凭…

MySQL 8.0 OCP 1Z0-908 题目解析(2)

题目005 Choose two. Which two actions can obtain information about deadlocks? □ A) Run the SHOW ENGINE INNODB MUTEX command from the mysql client. □ B) Enable the innodb_status_output_locks global parameter. □ C) Enable the innodb_print_all_deadlock…

XA协议和Tcc

基于 XA 协议的两阶段提交 (2PC)。这是一种分布式事务协议&#xff0c;旨在保证在多个参与者&#xff08;通常是不同的数据库或资源管理器&#xff09;共同参与的事务中&#xff0c;所有参与者要么都提交事务&#xff0c;要么都回滚事务&#xff0c;从而维护数据的一致性。 你…

数据分析-图2-图像对象设置参数与子图

from matplotlib import pyplot as mp mp.figure(A figure,facecolorgray) mp.plot([0,1],[1,2]) mp.figure(B figure,facecolorlightgray) mp.plot([1,2],[2,1]) #如果figure中标题已创建&#xff0c;则不会新建窗口&#xff0c; #而是将旧窗口设置为当前窗口 mp.figure(A fig…

跳转语句:break、continue、goto -《Go语言实战指南》

在控制流程中&#xff0c;我们有时需要跳出当前循环或跳过当前步骤&#xff0c;甚至直接跳转到指定位置。Go 提供了三种基本跳转语句&#xff1a; • break&#xff1a;跳出当前 for、switch 或 select。• continue&#xff1a;跳过本轮循环&#xff0c;进入下一轮。• goto&a…

Linux中find命令用法核心要点提炼

大家好&#xff0c;欢迎来到程序视点&#xff01;我是你们的老朋友.小二&#xff01; 以下是针对Linux中find命令用法的核心要点提炼&#xff1a; 基础语法结构 find [路径] [选项] [操作]路径&#xff1a;查找目录&#xff08;.表当前目录&#xff0c;/表根目录&#xff09;…

MQTT协议详解:物联网通信的轻量级解决方案

MQTT协议详解&#xff1a;物联网通信的轻量级解决方案 引言 在物联网(IoT)快速发展的今天&#xff0c;设备间高效可靠的通信变得至关重要。MQTT(Message Queuing Telemetry Transport)作为一种轻量级的发布/订阅协议&#xff0c;已成为物联网通信的首选解决方案。本文将深入探…

list基础用法

list基础用法 1.list的访问就不能用下标[]了,用迭代器2.emplace_back()几乎是与push_back()用法一致&#xff0c;但也有差别3.insert(),erase()的用法4.reverse()5.排序6.合并7.unique()&#xff08;去重&#xff09;8.splice剪切再粘贴 1.list的访问就不能用下标[]了,用迭代器…

2025年第十六届蓝桥杯大赛软件赛C/C++大学B组题解

第十六届蓝桥杯大赛软件赛C/C大学B组题解 试题A: 移动距离 问题描述 小明初始在二维平面的原点&#xff0c;他想前往坐标(233,666)。在移动过程中&#xff0c;他只能采用以下两种移动方式&#xff0c;并且这两种移动方式可以交替、不限次数地使用&#xff1a; 水平向右移动…

BGP实验练习2

需求&#xff1a; 1.AS1存在两个环回&#xff0c;一个地址为192.168.1.0/24&#xff0c;该地址不能再任何协议中宣告 AS3存在两个环回&#xff0c;该地址不能再任何协议中宣告 AS1还有一个环回地址为10.1.1.0/24&#xff0c;AS3另一个环回地址是11.1.1.0/24 最终要求这两…

【温湿度物联网】记录1:寄存器配置

一&#xff0c;及哦地址 基地址base的定义&#xff1a; ↓ 定义完是这个&#xff1a; GPIOA的地址就是以上的代表 2寄存器&#xff1a; 通过bsrr来改变odr寄存器&#xff0c;左移16位就是把0-15位的给移到高位的保留区&#xff0c;这样就归零了 3&#xff0c;项目寄存器实操…

MCP项目实例 - client sever交互

1. 项目概述 项目目标 构建一个本地智能舆论分析系统。 利用自然语言处理和多工具协作&#xff0c;实现用户查询意图的自动理解。 进行新闻检索、情绪分析、结构化输出和邮件推送。 系统流程 用户查询&#xff1a;用户输入查询请求。 提取关键词&#xff1a;从用户查询中…

运维体系架构规划

运维体系架构规划是一个系统性工程&#xff0c;旨在构建高效、稳定、安全的运维体系&#xff0c;保障业务系统的持续运行。下面从规划目标、核心模块、实施步骤等方面进行详细阐述&#xff1a; 一、规划目标 高可用性&#xff1a;确保业务系统 724 小时不间断运行&#xff0c…

zst-2001 上午题-历年真题 计算机网络(16个内容)

网络设备 计算机网络 - 第1题 ac 计算机网络 - 第2题 d 计算机网络 - 第3题 集线器不能隔离广播域和冲突域&#xff0c;所以集线器就1个广播域和冲突域 交换机就是那么的炫&#xff0c;可以隔离冲突域&#xff0c;有4给冲突域&#xff0c;但不能隔离广播域&#xf…