验证码改造完成

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