验证码改造完成
This commit is contained in:
@ -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();
|
||||||
|
@ -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> {
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user