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;
|
}
|
|
|
}
|