java生成图形验证码

java生成图形验证码
在写项目的时候登录的方式有多种多样,根据需求的不同,有些是用手机号获取验证码登录,有些是需要账号,密码 + 手机验证码登录,还有写是需要账号,密码 + 图形验证码登录,不论怎样搭配大体需要的账号,密码,手机号,验证码。今天就记录下图形验证码的生成。老规矩。先把图贴上
在这里插入图片描述
该图形验证码使用的包为:

<dependency>
      <groupId>com.github.whvcse</groupId>
      <artifactId>easy-captcha</artifactId>
      <version>1.6.2</version>
 </dependency>

由于我手上的项目登录是需要账号+密码+手机号验证码+图像验证码3重校验所以图形验证码我们使用的是1.6的版本就够了。
废话不多说我直接贴上代码:

@ApiOperation(value = "获取验证码", notes = "获取验证码")
    @NoLogging
    @GetMapping("/loggincode")
    public AjaxResult getCode() {
        // gif类型
        //GifCaptcha captcha = new GifCaptcha(130, 48);

        // 中文类型
        //ChineseCaptcha captcha = new ChineseCaptcha(130, 48);

        // 中文gif类型
        //ChineseGifCaptcha captcha = new ChineseGifCaptcha(130, 48);
        // 算术类型
        //ArithmeticCaptcha captcha = new ArithmeticCaptcha(130, 48);
        // png类型
        SpecCaptcha captcha = new SpecCaptcha(130, 48, 4);

        /**验证码字符类型
         TYPE_DEFAULT 数字和字母混合
         TYPE_ONLY_NUMBER 纯数字
         TYPE_ONLY_CHAR 纯字母
         TYPE_ONLY_UPPER 纯大写字母
         TYPE_ONLY_LOWER 纯小写字母
         TYPE_NUM_AND_UPPER  数字和大写字母**/
        captcha.setCharType(Captcha.TYPE_ONLY_NUMBER);//设置纯数字验证码
        // 设置内置字体
//        captcha.setFont(Captcha.FONT_1);
        // 设置系统字体
//        captcha.setFont(new Font("楷体", Font.PLAIN, 28));
        //验证码 VUL
        String verCode;
        if(StringUtils.isNotEmpty(SpringContextUtil.getApplicationContext().getEnvironment().getProperty("sms.enable")) && "false".equals(SpringContextUtil.getApplicationContext().getEnvironment().getProperty("sms.enable"))){
            //测试环境的图形验证码为默认值1234
            verCode = "1234";
            //测试环境登录不发送短信模拟验证码
            sendSms(verCode);
        }else {
             verCode = captcha.text().toLowerCase();
        }
        //uuid KEY
        String key ="login:captcha:"+ UUID.randomUUID().toString().replaceAll("-","");
        // 存入redis并设置过期时间为5分钟
        stringRedisTemplate.opsForValue().set(key, verCode, 5, TimeUnit.MINUTES);
        // 验证码信息
        Map imgResult = new HashMap(2) {{
            put("img", captcha.toBase64());
            put("uuid", key);
        }};
        return AjaxResult.success(imgResult);
    }


private void sendSms(String verCode) {
        //校验用户账号密码成功,发送短信验证码 若为开发环境则默认验证码为123456,正式环境则随机生成验证码
        if (StringUtils.isNotEmpty(SpringContextUtil.getApplicationContext().getEnvironment().getProperty("sms.enable")) && "false".equals(SpringContextUtil.getApplicationContext().getEnvironment().getProperty("sms.enable"))) {
            redisService.setCacheObject(CACHE_KEY_SMS_VALIDATECODE + verCode, "123456", 5L, TimeUnit.MINUTES);
        }
    }

大概设置就是这样子,可以设置字体,复杂度,组合方式等。生成好的验证码我们存在了Redis中方便登录输入时校验输入准确性。可根据自己项目的需要修改。

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

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

相关文章

【MySQL】sql表设计的注意事项

程序员的实用神器 文章目录 程序员的实用神器强烈推荐引言注意事项强烈推荐专栏集锦写在最后 强烈推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站:人工智能 推荐一个个人工作&#x…

机器学习案例:加州房产价格(四)

参考链接&#xff1a;https://hands1ml.apachecn.org/2/#_12 数据探索和可视化、发现规律 通过之前的工作&#xff0c;你只是快速查看了数据&#xff0c;对要处理的数据有了整体了解&#xff0c;现在的目标是更深的探索数据。 首先&#xff0c;保证你将测试集放在了一旁&…

数据库开发记录

一.MySQL相关 1.Spatial Data相关

AntDesign React 简单封装一个带错误提示的输入框

背景 没想到官方没有提供纯粹的带错误提示的输入框&#xff0c;官方提供了启用错误样式 status 属性。但是展示错误信息提示却需要捆绑Form 和 Form.Item。说实话有点不友好&#xff0c;我就一个简单的输入框&#xff0c;想要用户输入时用正则校验&#xff0c;错误时提示一些错…

电子硬件设计-LTC3839学习笔记

目录 1. 简介 2. 用法详解 2.1 工作原理 2.2 关键引脚分析 2.2.1 Pin6 - ITH 2.2.2 Pin 14/27 - BOOST1/2 3. 总结 1. 简介 具差分输出检测功能的快速、准确、两相、单路输出降压型 DC/DC 控制器。 特点&#xff1a; 输入&#xff1a;4.5V 至 38V&#xff0c;输出&am…

算法学习笔记(4)-基础排序算法

##O(n^2)算法时间复杂度的排序算法 目录 ##O(n^2)算法时间复杂度的排序算法 ##选择排序 ##原理 ##图例 ##代码实现示例 ##冒泡排序 ##原理 ##图例 ##代码实现示例 ##插入排序 ##原理 ##图例 ##代码实现示例 ##总结 ##选择排序 ##原理 在一个无序的数组或者列表…

使用Xshell工具连接ubuntu-方便快捷

使用Xshell连接ubuntu 在命令行输入 “sudo apt-get install openssh-server”安装openssh-server 开启 ssh-server&#xff0c;在命令行输入 “service ssh start”&#xff0c;然后输入密码即可

浅谈SiC MOSFET之双脉冲原理

1.双脉冲实验实验的必要性 在平常的使用中&#xff0c;我们基本通过芯片手册来了解功率器件的各种性能参数&#xff0c;但是手册中的参数的测量环境都是在理想状态下&#xff0c;与实际使用或多或少都会有差别。通过双脉冲实验可以获取器件在真实工况下的参数&#xff0c;对于产…

如何在创建之前检测 Elasticsearch 将使用哪个索引模板

作者&#xff1a;来自 Elastic Musab Dogan 概述 Elasticsearch 提供两种类型的索引模板&#xff1a;旧&#xff08;legacy&#xff09;索引模板和可组合 (composable) 索引模板。 Elasticsearch 7.8 中引入的可组合模板旨在替换旧模板&#xff0c;两者仍然可以在 Elasticsear…

ArcGIS软件损坏怎么修复?10.7分享

前言 我们经常ArcGIS用着用着就会出现一些莫名奇怪的情况&#xff0c;比如ArcGIS的工具箱都打&#xff0c;字体丢失等、dll文件缺失。尝试了很多方法之后没有效果的&#xff0c;我们可以对软件做修复 那么修复改如果做呢&#xff1f; 不需要卸载软件&#xff0c;直接安装deskt…

记录一下 log4j的漏洞

目录 背景 bug的产生 bug复现 JNDI 网络安全学习路线 &#xff08;2024最新整理&#xff09; 学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明&#xff1a; 背景 log4j这次的bug&#xff0c;我相信大家都已经知道了&#xff0c;仅以…

【异常】SpringBoot整合RabbitMQ-发送消息报错

错误信息 reply-code406, reply-textPRECONDITION_FAILED - inequivalent arg ‘x-message-ttl’ for queue ‘hello-queue’ in vhost ‘/lq’: received none but current is the value ‘10000’ of type ‘signedint’, class-id50, method-id10 错误原因 hello-queue这…

【每日刷题】Day39

【每日刷题】Day39 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 622. 设计循环队列 - 力扣&#xff08;LeetCode&#xff09; 2. 387. 字符串中的第一个唯一字符 - …

一觉醒来 AI科技圈发生的大小事儿 05月13日

&#x1f4f3;博弈论让 AI 更加正确、高效&#xff0c;LLM 与自己竞争 研究团队设计了共识博弈&#xff0c;通过让语言模型的生成器和判别器相互博弈来提高模型的准确性和内部一致性。这种方法不需要对基础模型进行训练或修改&#xff0c;可以在笔记本电脑上快速执行。研究结果…

《云原生安全攻防》-- 构建云原生攻防场景

在本节课程中&#xff0c;我们将学习云原生攻防场景的构建。为了研究云原生安全攻击案例&#xff0c;我们需要搭建一个云原生攻击测试环境&#xff0c;以便进行攻防研究和攻击手法的复现。 在这个课程中&#xff0c;我们将学习以下内容&#xff1a; 构建云原生攻防场景&#xf…

绝地求生:艾伦格回归活动来了,持续近1个月,新版本皮肤、G币等奖励白嫖

嗨&#xff0c;我是闲游盒~ 29.2版本更新在即&#xff0c;新活动来啦&#xff01;目前这个活动国内官方还没发&#xff0c;我就去台湾官方搬来了中文版方便大家观看&#xff0c;也分析一下这些奖励应该怎样才能获得。 新版本将在周二进行约9小时的停机维护&#xff0c;请注意安…

基于WTVxxx语音芯片方案在智能小家电领域的应用介绍

一、产品市场&#xff1a; WTVxxx系列语音芯片凭借其出色的性价比&#xff0c;在小家电制造业中脱颖而出&#xff0c;它在确保优异音质及全面功能的基础上&#xff0c;大幅度削减了生产成本&#xff0c;为产品在激烈的市场竞争中赢得了价格优势&#xff0c;并为制造商拓宽了盈利…

快速清理系统盘空间

占用系统盘资源比较大&#xff0c;有两种log与cache。 使用如下命令查看 du -h /var/cache --max-depth1 | sort -hr | head -n 10结果如下&#xff1a;

【Java应用】Java提取B站视频教程详情(完整代码|下载可直接运行|自带页面|可直接复制)

提取B站视频教程详情 背景 B站这个视频列表是真的体验感太差了,有时候想把章节复制下来,再对应的章节下面做笔记,实在是太难搞了,于是就有了这篇文文章 效果图 根据关键字获取视频id public Result videoList(RequestBody VideoDto videoDto) {String keyword videoDto.get…