diff --git a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/system/AdminUserService.java b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/system/AdminUserService.java index d057776b7..9a87783ef 100644 --- a/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/system/AdminUserService.java +++ b/accompany-admin/accompany-admin-service/src/main/java/com/accompany/admin/service/system/AdminUserService.java @@ -167,7 +167,7 @@ public class AdminUserService extends BaseService { logger.info("sendCodeAliyunSmsOrThrowEx"); DeviceInfo deviceInfo = new DeviceInfo(); deviceInfo.setApp("admin"); - smsService.sendSmsCode(adminUser.getPhone(), SmsTypeEnum.SUPER_ADMIN_LOGIN.value, deviceInfo, realIpAddress, smsCode); + smsService.sendSmsCode(adminUser.getPhone(), SmsTypeEnum.SUPER_ADMIN_LOGIN.value, deviceInfo, realIpAddress, smsCode, false); saveSmsCode(adminUser, smsCode, realIpAddress); return new BusiResult<>(BusiStatus.SUCCESS); } diff --git a/accompany-admin/accompany-flow-team-admin-service/src/main/java/com/accompany/service/FlowTeamAdminUserService.java b/accompany-admin/accompany-flow-team-admin-service/src/main/java/com/accompany/service/FlowTeamAdminUserService.java index 4d0d10b04..3f88828f6 100644 --- a/accompany-admin/accompany-flow-team-admin-service/src/main/java/com/accompany/service/FlowTeamAdminUserService.java +++ b/accompany-admin/accompany-flow-team-admin-service/src/main/java/com/accompany/service/FlowTeamAdminUserService.java @@ -70,7 +70,7 @@ public class FlowTeamAdminUserService extends BaseService { } String smsCode = String.format("%d", RandomUtil.getFiveRandomNumber()); smsService.sendSmsCode(phone, - SmsTypeEnum.SUPER_ADMIN_LOGIN.value, null, realIpAddress, smsCode); + SmsTypeEnum.SUPER_ADMIN_LOGIN.value, null, realIpAddress, smsCode, false); saveSmsCode(phone, smsCode, realIpAddress); return new BusiResult(BusiStatus.SUCCESS); } diff --git a/accompany-base/accompany-sms/accompany-sms-service/src/main/java/com/accompany/sms/service/SmsService.java b/accompany-base/accompany-sms/accompany-sms-service/src/main/java/com/accompany/sms/service/SmsService.java index beda97123..795b9d91f 100644 --- a/accompany-base/accompany-sms/accompany-sms-service/src/main/java/com/accompany/sms/service/SmsService.java +++ b/accompany-base/accompany-sms/accompany-sms-service/src/main/java/com/accompany/sms/service/SmsService.java @@ -45,7 +45,7 @@ public class SmsService extends BaseService { @Autowired private SysConfService sysConfService; - public void sendSmsCode(String mobile, Integer type, DeviceInfo deviceInfo, String ip, String code) { + public void sendSmsCode(String mobile, Integer type, DeviceInfo deviceInfo, String ip, String code, boolean needRateLimit) { if (StringUtils.isBlank(code)) { code = String.format("%d", RandomUtil.getFiveRandomNumber()); } @@ -55,15 +55,18 @@ public class SmsService extends BaseService { throw new ServiceException(BusiStatus.SMS_NOT_EXPIRED); } - String ipKey = RedisKey.sms_send_interval.getKey(ip); - RRateLimiter rateLimiter = redissonClient.getRateLimiter(ipKey); - if (!rateLimiter.isExists()) { - rateLimiter.trySetRate(RateType.OVERALL, 5, 1, RateIntervalUnit.DAYS); - } + RRateLimiter rateLimiter = null; + if (needRateLimit){ + String ipKey = RedisKey.sms_send_interval.getKey(ip); + rateLimiter = redissonClient.getRateLimiter(ipKey); + if (!rateLimiter.isExists()) { + rateLimiter.trySetRate(RateType.OVERALL, 5, 1, RateIntervalUnit.DAYS); + } - if (!rateLimiter.tryAcquire()){ - log.error("[sms rateLimiter] {} {} 被限流了", ip, type); - throw new ServiceException(BusiStatus.SMS_IP_TO_OFTEN); + if (!rateLimiter.tryAcquire()){ + log.error("[sms rateLimiter] {} {} 被限流了", ip, type); + throw new ServiceException(BusiStatus.SMS_IP_TO_OFTEN); + } } try { @@ -98,7 +101,9 @@ public class SmsService extends BaseService { // 写入缓存 jedisService.setex(getSmsKey(mobile), SmsConstant.SMS_EXPIRE_SECONDS, code); - rateLimiter.expire(1, TimeUnit.DAYS); + if (null != rateLimiter){ + rateLimiter.expire(1, TimeUnit.DAYS); + } } public boolean verifySmsCode(String mobile, String code) { diff --git a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/certification/AbstractCertifyService.java b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/certification/AbstractCertifyService.java index 8ff5f4762..34e7634d5 100644 --- a/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/certification/AbstractCertifyService.java +++ b/accompany-business/accompany-business-service/src/main/java/com/accompany/business/service/certification/AbstractCertifyService.java @@ -103,7 +103,7 @@ public abstract class AbstractCertifyService { if (StringUtils.isNotBlank(userLimit) && Integer.parseInt(userLimit) > Constant.USER_CERTIFY_LIMIT_TIMES) { throw new ServiceException(BusiStatus.SMS_DEVICE_LIMIT); } - smsService.sendSmsCode(phone, SmsTypeEnum.CERTIFICATION.value, deviceInfo, ip, null); + smsService.sendSmsCode(phone, SmsTypeEnum.CERTIFICATION.value, deviceInfo, ip, null, false); } protected String getDeviceId(Long uid) { diff --git a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/SmsController.java b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/SmsController.java index aedc04ba5..39258a5a4 100644 --- a/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/SmsController.java +++ b/accompany-business/accompany-business-web/src/main/java/com/accompany/business/controller/SmsController.java @@ -95,7 +95,7 @@ public class SmsController extends BaseController { return new BusiResult<>(BusiStatus.ACCOUNT_BLOCK_ERROR, I18NMessageSourceUtil.getMessage(ACCOUNT_LOGIN_BLOCK_MSG, new Object[]{mobile}, PartitionEnum.ENGLISH.getId())); } - smsService.sendSmsCode(mobile, type, deviceInfo, ip, null); + smsService.sendSmsCode(mobile, type, deviceInfo, ip, null, true); return new BusiResult<>(BusiStatus.SMS_SEND_SUCCESS); } diff --git a/accompany-business/accompany-business-web/src/test/java/servicetest/SmsSendTest.java b/accompany-business/accompany-business-web/src/test/java/servicetest/SmsSendTest.java deleted file mode 100644 index 136dcddc0..000000000 --- a/accompany-business/accompany-business-web/src/test/java/servicetest/SmsSendTest.java +++ /dev/null @@ -1,17 +0,0 @@ -package servicetest; - -import com.accompany.sms.service.SmsService; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -public class SmsSendTest extends CommonTest { - - @Autowired - private SmsService smsService; - - @Test - public void sendSms() throws InterruptedException { - smsService.sendSmsCode("8617817447469",15,null,"127.0.0.1","51145"); - smsService.sendSmsCode("17817447469",15,null,"127.0.0.1","88154"); - } -}