java-图片验证码

前言:

  在登录时校验验证码登录

<!-- 导入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方式结果:

 

posted @   Aa从心  阅读(103)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示