首页 > 其他分享 >简单图片验证码

简单图片验证码

时间:2023-10-06 09:55:51浏览次数:35  
标签:createText kaptcha responseOutputStream 简单 验证码 httpServletResponse clientToken 

通过在线的产品原型我们知道管理员登录采用的是图形验证码登录,我们通过接口文档找到获取图形验证码接口

为用户微服务的/user/imageCode接口,在代码里我们使用到了google开源的验证码工具kaptcha来生成验证码,所以我们要在用户微服务,引入了kaptcha的依赖。

<dependency>
    <groupId>com.github.penggle</groupId>
    <artifactId>kaptcha</artifactId>
    <version>2.3.2</version>
</dependency>

再看UserController里的逻辑

    @Autowired
    private DefaultKaptcha kaptcha;
    @Autowired
    private RedisTemplate<String,String> redisTemplate;
	/**
     * 获取图片验证码
     * @param httpServletRequest
     * @param httpServletResponse
     */
    @GetMapping("/imageCode/{clientToken}")
    public void getImageCode(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,@PathVariable String clientToken) throws IOException {
        ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
        String createText = kaptcha.createText();//生成随机字母+数字(4位)
        BufferedImage challenge = kaptcha.createImage(createText);//根据文本构建图片
        ImageIO.write(challenge, "jpg", jpegOutputStream);
        byte[] captchaChallengeAsJpeg  = jpegOutputStream.toByteArray();
        httpServletResponse.setContentType("image/jpeg");
        ServletOutputStream responseOutputStream =
                httpServletResponse.getOutputStream();
        responseOutputStream.write(captchaChallengeAsJpeg);
        responseOutputStream.flush();
        responseOutputStream.close();
        redisTemplate.boundValueOps(clientToken).set(createText,120, TimeUnit.SECONDS);
    }

我们发现改请求会通过google开源的验证码工具kaptcha来生成验证码。

1)前端发送clientToken到后端,其中clientToken是前端自行生成的不会重复。

2)利用kaptcha生成验证码。

3)利用HttpServletResponse将生成的图片返回给前端。

4)会将生成的验证码的答案记录在redis中,其中key是前端提供的clientToken,value是验证码的答案,验证码有效期2分钟。

标签:createText,kaptcha,responseOutputStream,简单,验证码,httpServletResponse,clientToken,
From: https://www.cnblogs.com/tomygzz/p/17744258.html

相关文章

  • app的简单创建:
    新建虚拟手机:效果:res->layout->activity_main.xml:点击code:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk......
  • 【计算几何】codeforces上面的一点简简单单的计算几何入门题
    开篇碎碎念我真的好喜欢开篇碎碎念啊(可恶真的是太话痨啦)最近有在cf上面写写题,唔不过还没上百题,过两天就可以写百题纪念啦,也还没上青,陌陌菜菜,陌陌在努力变强捏。cf1850GTheMorningStartag:用map进行维护,斜率与坐标的关系题目链接:G.TheMorningStar题意:找到一个点,使另一......
  • 实验1 C语言输入输出和简单程序编写
    1.实验任务1 task1_1源代码:1#include<stdio.h>2#include<stdlib.h>3intmain()4{5printf("0\n");6printf("<H>\n");7printf("II\n");8printf("0\n");9prin......
  • 网络图片下载工具
    1、首先要创建一个下载器类 这个类来实现图片下载功能  导入的commons-io-1.4.jar中有一个FileUtils(文件工具类)有一个方法能够实现这个功能 2、要把创建的类设置为Thread类的子类并且重写run()方法  因为要用到url(网络地址)和name(文件名字)所以创建了两个属性!!! ......
  • 有关于Mysql的简单问题及示例(增删改查 一对一 多对多 左外连接 右外链接)
    Mysql1、请自行设计表并针对该表练习最基本的增删改查且写出示例代码建立表格class其中有属性nameidgenderinterest表格建立完成向表中插入数据插入数据完成尝试删除表中id=101的数据删除数据成功尝试修改表中id为102的数据修改成功2、请问什么是一对多?请自......
  • 实验1_c语言输入输出和简单程序应用编程
    实验一1-1#include<stdio.h>intmain(){printf("O\n");printf("<H>\n");printf("II\n");printf("O\n");printf("<H>\n");printf("II\n");......
  • 实验1 C语言输入输出和简单程序编写
    1.试验任务1  task1.c//打印一个字符小人#include<stdio.h>intmain(){printf("o\n");printf("<H>\n");printf("II\n");return0;} task1_1.c//在垂直方向上打印出两个小人#include<stdio.h>int......
  • 使用python进行文件夹中图片文件名提取 并进行填充
    如题#-*-coding:utf-8-*-#@Time:2023/10/419:26#@Author:龙俊威#@File:sortall.py#@Software:PyCharmimportosfromPILimportImageimportmatplotlib.pyplotaspltimportnumpyasnppath=filepath='C:\\Users\Administrator\Desk......
  • 简单的商城系统的数据库设计
    简单的商城系统的数据库设计本文会详细介绍一下,简单商城系统的数据库的表的创建。本文使用的数据库是MySQL8.0.x。数据库可视化软件使用的是jetbrainsdatgrip。用户相关账号表createtableaccount(idint8auto_incrementprimarykeycomment'主键',usernam......
  • 简单介绍一下 Mysql 存储引擎
    1入门本文去浅浅的探讨一下mysql数据库的存储引擎。数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。现在许多数......