From 45f1163bd3feb4fb94c8bf02be448e394148e651 Mon Sep 17 00:00:00 2001 From: YUJT Date: Fri, 4 Jun 2021 11:16:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E5=8F=91=E9=80=81=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E9=98=BB=E6=96=AD=E6=97=B6=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/elink/esua/epdc/redis/SmsRedis.java | 26 +++++++++++++++++++ .../epdc/service/impl/SysSmsServiceImpl.java | 5 ++++ 2 files changed, 31 insertions(+) diff --git a/epdc-cloud-message/src/main/java/com/elink/esua/epdc/redis/SmsRedis.java b/epdc-cloud-message/src/main/java/com/elink/esua/epdc/redis/SmsRedis.java index 80d0d6d..a50dea3 100644 --- a/epdc-cloud-message/src/main/java/com/elink/esua/epdc/redis/SmsRedis.java +++ b/epdc-cloud-message/src/main/java/com/elink/esua/epdc/redis/SmsRedis.java @@ -49,4 +49,30 @@ public class SmsRedis { redisUtils.set(key, smsCode, RedisUtils.MINUTE_THIRTY_EXPIRE); } + /** + * 在redis中缓存一个标记,此标记存在时,阻断短信发送 + * + * @param mobile 发送手机号,或者用于拼接rediskey的字符串 + * @param exprie 阻断时长 + * @return void + * @author work@yujt.net.cn + * @date 2021/6/4 10:57 + */ + public void setWaitFlag(String mobile, long exprie) { + String smsCodeKey = RedisKeys.getPhoneSmsHistoryKey(mobile); + redisUtils.set(smsCodeKey, System.currentTimeMillis(), exprie); + } + + /** + * 判断是否处于短信阻断期间 + * + * @param mobile 发送手机号,或者用于拼接rediskey的字符串 + * @return boolean + * @author work@yujt.net.cn + * @date 2021/6/4 11:00 + */ + public boolean hasWaitFlag(String mobile) { + return null != redisUtils.get(RedisKeys.getPhoneSmsHistoryKey(mobile)); + } + } \ No newline at end of file diff --git a/epdc-cloud-message/src/main/java/com/elink/esua/epdc/service/impl/SysSmsServiceImpl.java b/epdc-cloud-message/src/main/java/com/elink/esua/epdc/service/impl/SysSmsServiceImpl.java index d742902..8fa2c2a 100644 --- a/epdc-cloud-message/src/main/java/com/elink/esua/epdc/service/impl/SysSmsServiceImpl.java +++ b/epdc-cloud-message/src/main/java/com/elink/esua/epdc/service/impl/SysSmsServiceImpl.java @@ -15,6 +15,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl; import com.elink.esua.epdc.commons.tools.constant.NumConstant; import com.elink.esua.epdc.commons.tools.exception.ErrorCode; +import com.elink.esua.epdc.commons.tools.redis.RedisUtils; import com.elink.esua.epdc.commons.tools.utils.RandomUtil; import com.elink.esua.epdc.dto.form.EpdcRegisterResultSmsFormDTO; import com.elink.esua.epdc.exception.ModuleErrorCode; @@ -145,6 +146,10 @@ public class SysSmsServiceImpl extends BaseServiceImpl @Override public void sendSms(String mobile, String keyword) { + if (smsRedis.hasWaitFlag(keyword)) { + throw new RenException("操作频繁,请稍后重试"); + } + smsRedis.setWaitFlag(keyword, RedisUtils.MINUTE_ONE_EXPIRE); String smsCode = RandomUtil.getNewRandomCode(NumConstant.SIX); // 缓存手机验证码 smsRedis.setSmsCode(keyword, smsCode);