首页 > 编程语言 >java-图片验证码

java-图片验证码

时间:2023-12-05 10:24:22浏览次数:29  
标签:lineCaptcha java String 验证码 code codeId identifyImageResp 图片

前言:

  在登录时校验验证码登录

<!-- 导入hutool工具类 -->
<dependency>
   <groupId>cn.hutool</groupId>
   <artifactId>hutool-all</artifactId>
   <version>5.8.16</version>
 </dependency>
 
<!-- IdWorker生成所需包 -->
 <dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.5.2</version>
</dependency>
<dependency>
  <groupId>com.imadcn.framework</groupId>
  <artifactId>idworker</artifactId>
  <version>1.5.0</version>
</dependency>    

 

示例代码:

  一.直接返回图片

@ApiOperation("获取图形验证码")
    @GetMapping("/identifyImage")
    public Result<String> identifyImage(HttpServletResponse response,
                                        @ApiParam(value = "图形验证码id,无值:生成验证码,有值:刷新验证码")
                                        @RequestParam(name = "codeId", required = false) String codeId) throws IOException {
        // 创建验证码,设置宽、高、长度、干扰线数量
        LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(200, 90, 4, 100);
        // 获取验证码字符串,赋值code
        String code = lineCaptcha.getCode();

        ///  将code保存到redi中,key:IdWorker.getId()生成基于雪花算法改良,val:code验证码值
        ///  并设置过期时间,第一次获取生成一次key,后续若用户看不清换一张,将codeId传递回来,覆盖原来redis的值
//        if (codeId == null) {
//            // IdWorker.getId():IdWorker工具类生成唯一ID,并转换成String类型
//            codeId = String.valueOf(IdWorker.getId());
//            // 将codeId、code.toUpperCase()、过期时间600秒:存储入Redis中
//            // code.toUpperCase():code装换成大写形式存储
//            redisUtil.set(codeId,code.toUpperCase(),600);
//        } else {
//            redisUtil.set(codeId,code.toUpperCase(),600);
//        }
        /* 图片方式传递 */
        // 将图片验证码codeId设置请求头中
        response.setHeader("codeId", codeId);
        // 获取向客户端发送响应数据的输出流
        try (ServletOutputStream outputStream = response.getOutputStream()) {
            // 验证码图片数据写入到输出流
            lineCaptcha.write(outputStream);
        } catch (Exception e) {
            throw new RuntimeException("图形验证码输出错误");
        }
        return ResultUtil.success(codeId);
        
         /* base64方式传递 新建 IdentifyImageResp类 image/codeId 属性 */
//        IdentifyImageResp identifyImageResp = new IdentifyImageResp();
//        identifyImageResp.setCodeId(codeId);
//        identifyImageResp.setImage(lineCaptcha.getImageBase64Data());
//        return ResultUtil.success(identifyImageResp);
    }

 图片方式:                                 base64方式结果:

 

标签:lineCaptcha,java,String,验证码,code,codeId,identifyImageResp,图片
From: https://www.cnblogs.com/Kikai/p/17876616.html

相关文章

  • JavaScript(JS) 判断没有属性的空对象{}的四种方法
    JavaScript(JS)中对象没有属性初始化时,可能使用{}进行初始化,如此我们判断这样的没有属性的空对象就不是很方便,本文主要介绍JavaScript(JS)中判断没有属性的空对象{}的五种方法,以及相关的示例代码。1、通过JSON.stringify()判断可以使用JSON.stringify()将Javascript对象转......
  • Java学习之路(十三)
    Java学习之路(十三)1、Collection集合1.1、数组和集合的区别【理解】相同点都是容器,可以存储多个数据不同点数组的长度是不可变的,集合的长度是可变的数组可以存基本数据类型和引用数据类型集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类1.......
  • 小傅哥带着你做 Java SDK 组件
    作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!......
  • Java运算符
    前言星期一,怎么突然学起来了运算符?是不是有点奇怪,当然不是突然想起来学的,而是特意来复习一遍(在代码中看到一个很高级的写法,嘿嘿!有用到位运算,厉害厉害~)运算符本来想直接写运算符的,但是想先简单讲一下什么是位运算。#比如简单的加法inta=35;intb=47;intc=a+b;当然在计......
  • 1-2 图片数据建模流程范例
    0.配置importos#mac系统上pytorch和matplotlib在jupyter中同时跑需要更改环境变量#os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"!pipinstalltorchmetricsimporttorchimporttorchvisionimporttorchkerasimporttorchmetricsprint('torch',torch......
  • Java登陆第十七天——正则表达式
    在java.util.regex包下,提供了正则表达式对字符串进行约束规范匹配正则表达式必须依靠Pattern类和Matcher类。PatternPattern类的主要作用是编写正则规范。常用方法如下:方法类型描述publicstaticPatterncompile(Stringregex)静态方法传入正则表达式规则,并返回......
  • Java基础故障处理工具
    适用场景:生产环境由于可视化工具侵入系统,带来资源占用、安全问题或者规模较小未部署可视化监控平台,此时要使用基础命令行工具;给一个系统定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里说的数据包括但不限于异常堆栈、虚拟机运行日志、垃圾......
  • java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1
    java.lang.IllegalStateException:ExpectedBEGIN_OBJECTbutwasSTRINGatline1column2path$packagecom.example.core.mydemo.scooterOrderSms;importcom.alibaba.fastjson.JSON;importcom.example.core.mydemo.json2.GsonUtils;importcom.google.gson.Gso......
  • 应用报错:java.lang.OutOfMemoryError: unable to create new native thread
    上个月生产环境忽然出现部分交易处理缓慢甚至超时,查看对应应用日志发现一直在刷报错日志,报错信息如下java.lang.OutOfMemoryError:unabletocreatenewnativethread从报错上来看是说不能创建本地线程了,应用都是容器部署的,开始我怀疑是容器内存不够了导致内存泄露,但经过查看容器......
  • Day19 Java 流程控制01:用户交互Scanner
    Java流程控制01:用户交互ScannerScanner对象之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类:Scanner类,可以通过它来获取用户的输入基本语法:Scannerscanner=newScanner(System.in);通过Scanner类的next()与nextLine()方......