验证码改造完成

This commit is contained in:
xuwenbo
2020-05-13 16:49:18 +08:00
parent 1a2361ae1e
commit 9ff4465134
2 changed files with 29 additions and 11 deletions

View File

@ -6,11 +6,16 @@ import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateEngine;
import cn.hutool.extra.template.TemplateUtil;
import co.yixiang.common.service.impl.BaseServiceImpl;
import co.yixiang.domain.AlipayConfig;
import co.yixiang.domain.VerificationCode;
import co.yixiang.domain.vo.EmailVo;
import co.yixiang.service.VerificationCodeService;
import co.yixiang.exception.BadRequestException;
import co.yixiang.repository.VerificationCodeRepository;
import co.yixiang.service.mapper.AlipayConfigMapper;
import co.yixiang.service.mapper.VerificationCodeMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
@ -24,23 +29,19 @@ import java.util.concurrent.*;
*/
@Service
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true, rollbackFor = Exception.class)
public class VerificationCodeServiceImpl implements VerificationCodeService {
private final VerificationCodeRepository verificationCodeRepository;
public class VerificationCodeServiceImpl extends BaseServiceImpl<VerificationCodeMapper, VerificationCode> implements VerificationCodeService {
@Value("${code.expiration}")
private Integer expiration;
public VerificationCodeServiceImpl(VerificationCodeRepository verificationCodeRepository) {
this.verificationCodeRepository = verificationCodeRepository;
}
@Override
@Transactional(rollbackFor = Exception.class)
public EmailVo sendEmail(VerificationCode code) {
EmailVo emailVo;
String content;
VerificationCode verificationCode = verificationCodeRepository.findByScenesAndTypeAndValueAndStatusIsTrue(code.getScenes(),code.getType(),code.getValue());
VerificationCode verificationCode = this.getOne(new QueryWrapper<VerificationCode>()
.eq("scenes",code.getScenes()).eq("type",code.getType()).eq("value",code.getValue()));
// 如果不存在有效的验证码,就创建一个新的
TemplateEngine engine = TemplateUtil.createEngine(new TemplateConfig("template", TemplateConfig.ResourceMode.CLASSPATH));
Template template = engine.getTemplate("email/email.ftl");
@ -48,7 +49,8 @@ public class VerificationCodeServiceImpl implements VerificationCodeService {
code.setCode(RandomUtil.randomNumbers (6));
content = template.render(Dict.create().set("code",code.getCode()));
emailVo = new EmailVo(Collections.singletonList(code.getValue()),"yshop后台管理系统",content);
timedDestruction(verificationCodeRepository.save(code));
this.save(code);
timedDestruction(code);
// 存在就再次发送原来的验证码
} else {
content = template.render(Dict.create().set("code",verificationCode.getCode()));
@ -59,12 +61,14 @@ public class VerificationCodeServiceImpl implements VerificationCodeService {
@Override
public void validated(VerificationCode code) {
VerificationCode verificationCode = verificationCodeRepository.findByScenesAndTypeAndValueAndStatusIsTrue(code.getScenes(),code.getType(),code.getValue());
VerificationCode verificationCode = this.getOne(new QueryWrapper<VerificationCode>()
.eq("scenes",code.getScenes()).eq("type",code.getType()).eq("value",code.getValue())
.eq("status",true));
if(verificationCode == null || !verificationCode.getCode().equals(code.getCode())){
throw new BadRequestException("无效验证码");
} else {
verificationCode.setStatus(false);
verificationCodeRepository.save(verificationCode);
this.save(verificationCode);
}
}
@ -78,7 +82,7 @@ public class VerificationCodeServiceImpl implements VerificationCodeService {
try {
executorService.schedule(() -> {
verifyCode.setStatus(false);
verificationCodeRepository.save(verifyCode);
this.save(verifyCode);
}, expiration * 60 * 1000L, TimeUnit.MILLISECONDS);
}catch (Exception e){
e.printStackTrace();

View File

@ -0,0 +1,14 @@
package co.yixiang.service.mapper;
import co.yixiang.common.mapper.CoreMapper;
import co.yixiang.domain.AlipayConfig;
import co.yixiang.domain.VerificationCode;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
@Repository
@Mapper
public interface VerificationCodeMapper extends CoreMapper<VerificationCode> {
}