简单图片验证码

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

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


com.github.penggle
kaptcha
2.3.2

再看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分钟。

posted @ 2023-10-06 09:44  天天开心1?  阅读(60)  评论(0)    收藏  举报