通过在线的产品原型我们知道管理员登录采用的是图形验证码登录,我们通过接口文档找到获取图形验证码接口
为用户微服务的/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