package com.moral.util;
|
|
import com.google.code.kaptcha.impl.DefaultKaptcha;
|
import com.moral.pojo.VerificationCode;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.stereotype.Component;
|
import org.springframework.util.ObjectUtils;
|
import sun.misc.BASE64Encoder;
|
|
import javax.annotation.Resource;
|
import javax.imageio.ImageIO;
|
import javax.servlet.ServletOutputStream;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.awt.image.BufferedImage;
|
import java.io.ByteArrayOutputStream;
|
import java.io.IOException;
|
import java.util.UUID;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* @ClassName KaptchaUtils
|
* @Description 验证码工具类
|
* @Author 陈凯裕
|
* @Date 2021/3/16 15:36
|
* @Version TODO
|
**/
|
@Component
|
@Slf4j
|
public class KaptchaUtils {
|
|
private static DefaultKaptcha defaultKaptcha;
|
|
private static RedisTemplate redisTemplate;
|
|
//验证码有效期 单位:秒
|
private static final int validity_time = 60;
|
|
@Autowired
|
public void setRedisTemplate(RedisTemplate redisTemplate) {
|
KaptchaUtils.redisTemplate = redisTemplate;
|
}
|
|
@Autowired
|
@Qualifier(value = "kaptchaProducer")
|
public void setDefaultKaptcha(DefaultKaptcha defaultKaptcha) {
|
KaptchaUtils.defaultKaptcha = defaultKaptcha;
|
}
|
|
/**
|
* @Description: 生成验证码
|
* @Param: []
|
* @return: java.lang.String
|
* @Author: 陈凯裕
|
* @Date: 2021/3/16
|
*/
|
|
public static VerificationCode createVerificationCode() throws IOException {
|
VerificationCode verificationCode = new VerificationCode();
|
//生成验证码内容
|
String text = defaultKaptcha.createText();
|
//生成图片
|
BufferedImage image = defaultKaptcha.createImage(text);
|
//获取图片的字节数组
|
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
ImageIO.write(image,"jpg",outputStream);
|
byte[] bytes = outputStream.toByteArray();
|
//将字节数组进行编码
|
BASE64Encoder encoder = new BASE64Encoder();
|
String encode = encoder.encode(bytes);
|
//将验证码存入redis
|
String key = UUID.randomUUID().toString();
|
redisTemplate.opsForValue().set(key,text);
|
redisTemplate.expire(key,validity_time, TimeUnit.SECONDS);
|
verificationCode.setKey(key);
|
verificationCode.setEncode(encode);
|
return verificationCode;
|
}
|
public static boolean verify(VerificationCode code) {
|
String key = code.getKey();
|
String inputText = code.getInputText();
|
String validText = (String) redisTemplate.opsForValue().get(key);
|
if(inputText.equals(validText))
|
return true;
|
return false;
|
}
|
|
|
|
}
|