package com.monkeylessey.controller.system; import com.google.code.kaptcha.Producer; import com.monkeylessey.constant.RedisKeyExpireConstants; import com.monkeylessey.constant.RedisKeyPrefixConstants; import com.monkeylessey.sys.domain.vo.CaptchaVO; import com.monkeylessey.response.Result; import com.monkeylessey.framework.utils.RedisUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.springframework.util.Base64Utils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.UUID; /** * @author 29443 * @version 1.0 * @date 2022/4/21 */ @RestController @RequiredArgsConstructor @Api(value = "登录相关", tags = "登录相关") public class SysLoginController { private final RedisUtil redisUtil; private final Producer captcha; @GetMapping("/captcha") @ApiOperation(value = "获取验证码", notes = "获取验证码") public Result getCaptcha() throws IOException { // 生成验证码id String captchaId = UUID.randomUUID().toString().substring(0, 10); String key = RedisKeyPrefixConstants.CAPTCHA + captchaId; // 生成验证码 String code = captcha.createText(); BufferedImage image = captcha.createImage(code); // 创建字节数组缓冲 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); // 将生成的验证码BufferedImage转为byte数组 ImageIO.write(image, "jpg", byteArrayOutputStream); byte[] bytes = byteArrayOutputStream.toByteArray(); // 将byte数组使用Base64编码 String base64 = Base64Utils.encodeToString(bytes); // 将生成的验证码放入redis,默认有效2分钟 redisUtil.saveForValueWithExpire(key, code, RedisKeyExpireConstants.CAPTCHA_EXPIRE_TIME, RedisKeyExpireConstants.CAPTCHA_TIME_UNIT); return Result.ok("获取验证码成功").data(new CaptchaVO(captchaId, "data:image/jpg;base64," + base64)); } }