package com.zbkj.admin.service.impl;
|
|
import cn.hutool.core.util.ObjectUtil;
|
import com.zbkj.common.constants.Constants;
|
import com.zbkj.common.exception.CarException;
|
import com.zbkj.common.utils.CarUtil;
|
import com.zbkj.common.utils.RedisUtil;
|
import com.zbkj.common.utils.ValidateCodeUtil;
|
import com.zbkj.admin.service.ValidateCodeService;
|
import com.zbkj.admin.vo.ValidateCode;
|
import org.apache.commons.codec.digest.DigestUtils;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* ValidateCodeService 实现类
|
*/
|
@Service
|
public class ValidateCodeServiceImpl implements ValidateCodeService {
|
|
@Resource
|
private RedisUtil redisAdminUtil;
|
|
/**
|
* 获取验证码信息
|
*/
|
@Override
|
public ValidateCode get() {
|
ValidateCodeUtil.Validate randomCode = ValidateCodeUtil.getRandomCode();//直接调用静态方法,返回验证码对象
|
if (ObjectUtil.isNull(randomCode)) {
|
return null;
|
}
|
|
String value = randomCode.getValue().toLowerCase();
|
String md5Key = DigestUtils.md5Hex(value);
|
String redisKey = getRedisKey(md5Key);
|
redisAdminUtil.set(redisKey, value, 5L, TimeUnit.MINUTES); //5分钟过期
|
String base64Str = randomCode.getBase64Str();
|
return new ValidateCode(md5Key, CarUtil.getBase64Image(base64Str));
|
}
|
|
/**
|
* 获取redis key
|
* @param md5Key value的md5加密值
|
*/
|
public String getRedisKey(String md5Key) {
|
return Constants.VALIDATE_REDIS_KEY_PREFIX + md5Key;
|
}
|
|
/**
|
* 验证
|
*/
|
public Boolean check(String key, String code) {
|
if (!redisAdminUtil.exists(getRedisKey(key))) {
|
throw new CarException("验证码错误");
|
}
|
Object redisValue = redisAdminUtil.get(getRedisKey(key));
|
if (ObjectUtil.isNull(redisValue)) {
|
return false;
|
}
|
return redisValue.equals(code.toLowerCase());
|
}
|
}
|