生成验证码-超简单


引言

在Web开发中,验证码是一种常见的防止恶意破解、自动化提交的有效手段。在Java项目中,我们可以使用Hutool工具库快速实现验证码功能。Hutool是一个Java工具包,它以简洁易用著称,其中包含了验证码模块,可以让我们轻松生成各种验证码,包括图形验证码、圆圈干扰验证码等。本文将详细介绍如何使用Hutool来实现验证码的生成和校验。

一. Hutool简介

官网 https://hutool.cn/
Hutool是一个Java工具类库,由国内开发者Javen在GitHub上维护。它类似于Apache CommonsGoogle Guava,但它的设计哲学是更加简单易用。Hutool提供了一系列的小工具,涵盖了文件操作、网络操作、加密解密、反射、日期处理等方面。其中,hutool-captcha模块专门用于验证码的生成。

二. 环境准备

在开始编码之前,请确保你的项目中已经添加了Hutool的依赖。如果你是使用Maven进行项目管理,可以在pom.xml文件中添加如下依赖:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>最新版本</version>
</dependency>

请替换最新版本为你需要的版本号,可以在Hutool的GitHub发布页面找到最新的版本信息。

三. 生成验证码

Hutool提供了多种验证码的实现,包括CircleCaptcha(圆圈干扰验证码)、ShearCaptcha(扭曲干扰验证码)、LineCaptcha(线段干扰验证码)等。这里我们以CircleCaptcha为例,展示如何生成一个基本的验证码。

首先,我们需要创建一个验证码控制类,并设置相应的参数,如验证码的宽度、高度和字符数:

@Controller
@Slf4j
public class CaptChaController {
    // 定义一个GET请求映射,路径为/captcha
    @GetMapping("/captcha")
    public String captcha(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 创建一个圆形验证码对象,宽400px,高200px,字符个数4个,干扰线条数2条
        CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(400, 200, 4, 2);
        // 获取生成的验证码字符串
        String code = captcha.getCode();
        // 记录日志,输出生成的图片验证码
        log.info("生成的图片验证码为:{}",code);
        // 将验证码字符串存储到session中
        request.getSession().setAttribute("CAPTCHA_CODE",code);
        // 将验证码图片写入response的输出流中,格式为jpeg
        ImageIO.write(captcha.getImage(), "jpeg",response.getOutputStream() );
        // 返回视图名称为captcha
        return "captcha"; 
    }
}

上面的代码创建了一个宽度为400像素、高度为200像素的验证码,其中包含4个字符,2条干扰线。

四. 验证码测试

在这里插入图片描述

五. 结语

Hutool的hutool-captcha模块让Java开发者可以非常方便地实现验证码功能,无需从头开始设计复杂的图形处理逻辑。通过简单的API调用,我们可以快速生成和校验验证码,提高开发效率。


这篇文章简单介绍了Hutool的验证码功能,你可以根据实际需要进一步探索Hutool的其他功能。如果你想要了解更多关于Hutool的高级用法,可以访问其官方文档或GitHub仓库。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【RPA】智能自动化的未来:AI + RPA

伴随着人工智能&#xff08;AI&#xff09;技术的迅猛进步&#xff0c;机器人流程自动化&#xff08;RPA&#xff09;正在经历一场翻天覆地的变革。AI为RPA注入了新的活力&#xff0c;尤其在处理复杂任务和制定决策方面。通过融合自然语言处理&#xff08;NLP&#xff09;、机器…

Codeforces Round 260 (Div. 1)A. Boredom(dp)

最开始写了一发贪心wa了&#xff0c;然后这种选和不选的组合优化问题&#xff0c;一般是考虑动态规划 d p [ i ] [ 0 ] &#xff1a; dp[i][0]&#xff1a; dp[i][0]&#xff1a;表示第i个数不选的最大值 d p [ i ] [ 1 ] &#xff1a; dp[i][1]&#xff1a; dp[i][1]&#xf…

sql相关子查询

1.什么是相关子查询 相关子查询是一个嵌套在外部查询中的查询&#xff0c;它使用了外部查询的某些值。每当外部查询处理一行数据时&#xff0c;相关子查询就会针对那行数据执行一次&#xff0c;因此它的结果可以依赖于外部查询中正在处理的行。 2.为什么要使用相关子…

C++面试宝典第27题:完全平方数之和

题目 给定正整数 n,找到若干个完全平方数(比如:1、4、9、16、...),使得它们的和等于n。你需要让组成和的完全平方数的个数最少。 示例1: 输入:n = 12 输出:3 解释:12 = 4 + 4 + 4。 示例2: 输入:n = 13 输出:2 解释:13 = 4 + 9。 解析 这道题主要考察应聘者对于…

Java风暴:打造高效作家信息管理平台

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

每日OJ题_位运算①_位运算解题方法+3道OJ

目录 位运算算法原理 ①力扣191. 位1的个数 解析代码 ②力扣338. 比特位计数 解析代码 ③力扣461. 汉明距离 解析代码 位运算算法原理 常见位运算解题方法&#xff1a; 1. 基础位运算&#xff1a; &&#xff1a;按位与&#xff0c;有0就是0 | &#xff1a;按位或&a…

360 安全浏览器 - 页面布局 - 常用网址

360 安全浏览器 - 页面布局 - 常用网址 自定义样式 let myStyle {https://www.baidu.com/: {color: #001483,backgroundColor: #FFF,icon: https://www.baidu.com/favicon.ico},https://blog.csdn.net/jx520: {backgroundColor: #fc5531,icon: https://g.csdnimg.cn/static/l…

Java 学习和实践笔记(2)

今天的学习进度&#xff1a; 注册并下载安装好了Java 8&#xff0c;之后进行以下配置。 1&#xff09;path 是一个常见的环境变量&#xff0c;它告诉系统除了在当前的目标下妹寻找此程序外&#xff0c;还可以到path指定的目录下找。这句话是什么意思呢&#xff1f;以下举报例…

使用 Astra DB、LangChain 和 Vercel 构建维基百科聊天机器人

一、说明 你有多少次问谷歌一个问题&#xff0c;只是为了得到一个维基百科的链接&#xff0c;需要你点击、加载网站并滚动才能找到答案&#xff1f;那么自动问题搜索又是如何呢&#xff1f; 维基百科是搜索引擎的顶级搜索结果&#xff0c;因为它是一个值得信赖的网站;人们认为那…

《游戏引擎架构》 -- 学习2

声明&#xff0c;定义&#xff0c;以及链接规范 翻译单元 声明与定义 链接规范 C/C 内存布局 可执行映像 程序堆栈 动态分配的堆 对象的内存布局 kilobyte 和 kibibyte 流水线缓存以及优化 未完待续。。。

async 与 await(JavaScript)

目录捏 前言一、async二、await三、使用方法总结 前言 async / await 是 ES2017(ES8) 提出的基于 Promise 解决异步的最终方案。上一篇文章介绍了 回调地狱 与 Promise&#xff08;JavaScript&#xff09;&#xff0c;因为 Promise 的编程模型依然充斥着大量的 then 方法&#…

软件测试工程师——缺陷(一篇足以)

目录 定义 缺陷的类型 缺陷的严重程度 缺陷的状态 缺陷的根源 ​缺陷的来源 缺陷的起源 缺陷的生命周期 缺陷的识别 缺陷报告模板 编写缺陷报告的目的 缺陷报告编写的准则 缺陷描述的准则 定义 1. 软件未实现产品说明书中所提及的功能 2. 软件实现了产品说明书中…

stable_diffusion提示词编写笔记(1)

stable_diffusion提示词编写笔记(1) start 总结一下AI绘画学到的知识。 一.提示词分两种&#xff1a; 1.正向提示词&#xff1b; 2.反向提示词&#xff1b; 一个对应你希望图形包含的内容提示词&#xff0c;一个对应你不希望图形出现的内容提示词。 二.如何书写提示词 1.内…

连杆的形状优化

前言 本示例使用优化模块在不改变连杆体积的情况下将连杆中的应力集中降至最低。 本页讨论 前言应用描述Abaqus建模方法和仿真技术文件参考 应用描述 此示例说明了连杆的形状优化。形状优化对曲面节点在设计区域中的位置进行轻微修改&#xff0c;以实现优化的解决方案。形状优…

pwn学习笔记(2)ret_2_text_or_shellcode

pwn学习笔记&#xff08;2&#xff09; 1.三种常见的寄存器&#xff1a; ​ ax寄存器&#xff1a;通用寄存器&#xff0c;可用于存放多种数据 ​ bp寄存器&#xff1a;存放的是栈帧的栈底地址 ​ sp寄存器&#xff1a;存放的是栈顶的地址 2.栈帧与栈工作的简介&#xff1a…

Linux(Ubuntu)环境下安装卸载Python3(避免踩坑)

一、安装 第一步&#xff1a; 进入/usr/local/目录&#xff0c;下载Python3&#xff0c;这里我下载的是python 3.8.10&#xff0c;如果要下载其他版本改下链接中的版本号&#xff0c;需与官网版本号对应。 wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz第…

HTML小白入门学习-表格标签

一、前言 话说上文&#xff0c;我们对HTML的表单类标签进行简单的学习和认识&#xff0c; 分别是<form>、<input>、<textarea>、<label>、<select>和<button>这几个标签。 与表单标签有一字之别的表格标签&#xff0c;就是本文的主角。本…

【MySQL】学习和总结DCL的权限控制

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-Bl9kYeLf8GfpdQgL {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Rating组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Rating组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Rating组件 提供在给定范围内选择评分的组件。 子组件 无。 接口 Rating(opt…

整合RabbitMQ实现消息异步发送

消息队列中间件 消息队列中间件是分布式系统中重要的组件&#xff0c;主要解决应用耦合&#xff0c;异步消息&#xff0c;流量削峰等问题。 中间件最标准的用法是生产者生产消息传送到队列&#xff0c;消费者从队列中拿取消息并处理&#xff0c;生产者不用关心是谁来消费&#…