实现方式
后端引入kaptcha谷歌验证码生成工具,封装成一个接口。前端调用前先生成一个uuid字符串,将这个参数拼在图片的src属性后边,后端获得这个uuid参数,将其存入以uuid为key值,生成的验证码code值为value存入redis,有效期验证10分钟。校验验证码的时候前端将uuid值和code值一起传到后端,后端通过redis查找校验验证码是否正确。一般需求情况下,验证码需要刷新,因为uuid参数是拼在src属性后边,重新生成一个uuid即可完成刷新。
后端
pom.xml 需要依赖
1 | <dependencies> |
application.yml 配置文件
1 | server: |
Redis 工具类
1 | package com.example.utils; |
生成验证码接口
从前端获取一个uuid,将uuid和生成的code值以key、value形式存入redis,并设置有效期限。同时返回验证码图片给前端。
1 | "/render") ( |
校验验证码
从前端获取uuid以及code值,通过redis查找code值是否匹配,匹配成功移除rediskey值。
1 | "/valid") ( |
前端
验证码获取
前端是基于vue实现的,创建一个img标签用来接收后端生成接口返回的图片,这里还需要有一个uuid。在vue的mounted生命周期方法中先生成uuid值,并拼到图片的src属性后边。
1 | <template> |
页面成功显示图片
刷新二维码
给img绑定一个点击事件,执行refresh方法
1 | <img @click="refresh" :src="`http://localhost:8080/kaptcha/render?uuid=` + uuid" alt="" /> |
通过重新生成uuid来刷新图片链接地址,从而重新请求
1 | // 刷新二维码 |