package com.gkhy.assess.system.service.impl; import cn.hutool.core.codec.Base64; import com.gkhy.assess.common.constant.CacheConstant; import com.gkhy.assess.common.exception.ApiException; import com.gkhy.assess.common.utils.RedisUtils; import com.gkhy.assess.system.domain.vo.CaptchaVO; import com.gkhy.assess.system.service.CaptchaService; import com.google.code.kaptcha.Producer; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.FastByteArrayOutputStream; import javax.annotation.Resource; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.UUID; import java.util.concurrent.TimeUnit; @Slf4j @Service public class CaptchaServiceImpl implements CaptchaService { @Resource(name = "captchaProducer") private Producer captchaProducer; @Resource(name = "captchaProducerMath") private Producer captchaProducerMath; @Autowired private RedisUtils redisUtils; @Override public CaptchaVO captchaImage() { String uuid= UUID.randomUUID().toString(); String verifyKey= CacheConstant.CAPTCHA_CODE_KEY+uuid; String capText=captchaProducerMath.createText(); String capStr=capText.substring(0,capText.lastIndexOf("@")); String code=capText.substring(capText.lastIndexOf("@")+1); BufferedImage image=captchaProducerMath.createImage(capStr); redisUtils.set(verifyKey,code,2, TimeUnit.MINUTES); // 转换流信息写出 FastByteArrayOutputStream os = new FastByteArrayOutputStream(); try { ImageIO.write(image, "jpg", os); } catch (IOException e) { log.error(e.getMessage()); throw new ApiException("生成验证码失败"); } CaptchaVO captchaVO=new CaptchaVO(); captchaVO.setUuid(uuid); captchaVO.setImage(Base64.encode(os.toByteArray())); return captchaVO; } }