From 1e73ec8c55874e767a865dca83f38db4709a66ca Mon Sep 17 00:00:00 2001 From: glj Date: Sat, 8 Jul 2023 13:50:19 +0800 Subject: [PATCH] =?UTF-8?q?glj-=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vordm/controller/CaptchaController.java | 99 ++++++++++++++++++- .../controller/DisasterInfoController.java | 4 +- .../impl/AdministratorServiceImpl.java | 22 ++++- .../vordm/service/impl/EmailServiceImpl.java | 2 +- .../vordm/service/impl/NewsServiceImpl.java | 3 +- .../src/main/resources/templates/email.html | 4 +- 6 files changed, 122 insertions(+), 12 deletions(-) diff --git a/kn-service/biz-vordm/src/main/java/com/kening/vordm/controller/CaptchaController.java b/kn-service/biz-vordm/src/main/java/com/kening/vordm/controller/CaptchaController.java index b6119e4..871dc41 100644 --- a/kn-service/biz-vordm/src/main/java/com/kening/vordm/controller/CaptchaController.java +++ b/kn-service/biz-vordm/src/main/java/com/kening/vordm/controller/CaptchaController.java @@ -1,17 +1,31 @@ package com.kening.vordm.controller; +import com.kening.vordm.entity.Email; +import com.kening.vordm.mapper.GuestInfoMapper; +import com.kening.vordm.service.EmailService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springblade.common.cache.CacheNames; import org.springblade.core.boot.ctrl.BladeController; +import org.springblade.core.cache.utils.CacheUtil; import org.springblade.core.redis.cache.BladeRedis; import org.springblade.core.tool.api.R; +import org.springblade.core.tool.support.Kv; +import org.springblade.core.tool.utils.DigestUtil; import org.springblade.core.tool.utils.StringUtil; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.*; + +import java.time.Duration; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +import static org.springblade.core.cache.constant.CacheConstant.USER_CACHE; /** * @author wanghongqing @@ -21,6 +35,7 @@ import org.springframework.web.bind.annotation.RestController; @RequestMapping("/ui/captcha") @RequiredArgsConstructor @Api(value = "验证码校验接口", tags = "验证码校验") +@Slf4j public class CaptchaController extends BladeController { private final BladeRedis bladeRedis; @@ -37,4 +52,80 @@ public class CaptchaController extends BladeController { } return R.success("OK"); } + + private final EmailService emailService; + + private final GuestInfoMapper guestInfoMapper; + + //发送邮箱验证码 + @GetMapping("/sendEmailCode") + @ApiOperation(value = "验证码校验", notes = "传入需要校验的邮箱") + public R sendEmailCode(String emailAccount) { + String verCode = makeRandomPassword(4); + bladeRedis.setEx(CacheNames.CAPTCHA_KEY + emailAccount, verCode, Duration.ofMinutes(5)); + //发送邮件 + Email email = new Email(); + email.setSubject("Retrieve password and verify email address"); + String text = "Code:" + verCode + "
"; + text += "period of validity" + 5 + "minute" + "
"; + + email.setText(text); + String[] to = new String[]{emailAccount}; + email.setTos(to); + email.setHtmlText(true); + try { + emailService.sendMimeMessage(email); + } catch (Exception e) { + log.error("发送邮件失败:{}", e); + return R.fail("发送失败"); + } + // 将key返回给前端 + return R.success("OK"); + } + + @GetMapping("/codeCheck") + @ApiOperation(value = "邮箱验证码校验", notes = "传入需要校验的验证码以及缓存Key") + public R codeCheck(String emailAccount, String code) { + // 获取验证码 + String redisCode = bladeRedis.get(CacheNames.CAPTCHA_KEY + emailAccount); + // 判断验证码 + if (code == null || !StringUtil.equalsIgnoreCase(redisCode, code)) { + return R.data(1404, "Verification code error"); + } + + String password = makeRandomPassword(8); + + //修改用户密码 + guestInfoMapper.updatePassword(emailAccount, DigestUtil.encrypt(password)); + CacheUtil.clear(USER_CACHE); + //发送邮件 + Email email = new Email(); + email.setSubject("Retrieve password and verify email address"); + String text = "Latest password:" + password + "
"; + + email.setText(text); + String[] to = new String[]{emailAccount}; + email.setTos(to); + email.setHtmlText(true); + try { + emailService.sendMimeMessage(email); + } catch (Exception e) { + log.error("发送邮件失败:{}", e); + return R.fail("发送失败"); + } + return R.success("OK"); + } + + + + + public static String makeRandomPassword(int len) { + char charr[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".toCharArray(); + StringBuilder sb = new StringBuilder(); + Random r = new Random(); + for (int x = 0; x < len; ++x) { + sb.append(charr[r.nextInt(charr.length)]); + } + return sb.toString(); + } } diff --git a/kn-service/biz-vordm/src/main/java/com/kening/vordm/controller/DisasterInfoController.java b/kn-service/biz-vordm/src/main/java/com/kening/vordm/controller/DisasterInfoController.java index b227078..40520a9 100644 --- a/kn-service/biz-vordm/src/main/java/com/kening/vordm/controller/DisasterInfoController.java +++ b/kn-service/biz-vordm/src/main/java/com/kening/vordm/controller/DisasterInfoController.java @@ -346,6 +346,7 @@ public class DisasterInfoController { Boolean flag = disasterInfoService.updateById(disasterInfo); return R.data(flag); } + private final EmailService emailService; @ApiOperationSupport(order = 6) @ApiOperation(value = "提交", notes = "传入Tool") @@ -360,6 +361,7 @@ public class DisasterInfoController { one.setStatus(1); one.setManagerId(chiefId); guestManageDisasterRefService.updateById(one); + disasterInfoService.updateById(disasterInfo); //获得disasterInfo disasterInfo = disasterInfoService.getById(disasterInfo.getId()); @@ -368,7 +370,7 @@ public class DisasterInfoController { Administrator user = administratorService.getById(chiefId); //发送邮件 Email email = new Email(); - email.setSubject("You have a new pending disaster"); + email.setSubject("You have a Disaster Response task pending"); String text ="Disaster Keyword:" + disasterInfo.getDisasterKeyword()+"
"; text+= "Disaster Time:" + disasterInfo.getDisasterTime()+"
"; //disaster_country diff --git a/kn-service/biz-vordm/src/main/java/com/kening/vordm/service/impl/AdministratorServiceImpl.java b/kn-service/biz-vordm/src/main/java/com/kening/vordm/service/impl/AdministratorServiceImpl.java index 67bd11b..6d46375 100644 --- a/kn-service/biz-vordm/src/main/java/com/kening/vordm/service/impl/AdministratorServiceImpl.java +++ b/kn-service/biz-vordm/src/main/java/com/kening/vordm/service/impl/AdministratorServiceImpl.java @@ -19,6 +19,7 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; +import java.util.Random; /** * 管理员用户实现类 @@ -66,8 +67,11 @@ public class AdministratorServiceImpl extends BaseServiceImpl dataMap = new HashMap<>(); dataMap.put("account", administrator.getAccount()); //默认密码 1234 - dataMap.put("password", "1234"); + dataMap.put("password", s); dataMap.put("link",link); dataMap.put("time", LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd"))); Email email = new Email(); @@ -94,4 +98,16 @@ public class AdministratorServiceImpl extends BaseServiceImpl @Override public R importTemplate(MultipartFile file, Integer typeData, Long disasterId) { List content; + ExcelReader reader = null; try { - ExcelReader reader = ExcelUtil.getReader(file.getInputStream()); + reader = ExcelUtil.getReader(file.getInputStream()); content = reader.read(); } catch (Exception var30) { return R.fail("上传文件格式解析错误"); diff --git a/kn-service/biz-vordm/src/main/resources/templates/email.html b/kn-service/biz-vordm/src/main/resources/templates/email.html index 141b70a..6fe03fc 100644 --- a/kn-service/biz-vordm/src/main/resources/templates/email.html +++ b/kn-service/biz-vordm/src/main/resources/templates/email.html @@ -67,11 +67,11 @@ 激活账号-->
-

Hello, thank you for your registration

+

Your account number:

Your password:

The date you registered:

-

Please click login:Point-me jump

+

Please click here to jump to the:login interface