redis限制手机验证码重发频率
This commit is contained in:
@ -1,12 +1,17 @@
|
||||
package com.chinaunicom.mall.ebtp.extend.shortmessage.controller;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.chinaunicom.mall.ebtp.common.base.entity.BaseResponse;
|
||||
import com.chinaunicom.mall.ebtp.common.exception.common.CommonExceptionEnum;
|
||||
import com.chinaunicom.mall.ebtp.common.idempotent.annotation.Idempotent;
|
||||
import com.chinaunicom.mall.ebtp.extend.shortmessage.entity.AuthCodeVo;
|
||||
import com.chinaunicom.mall.ebtp.extend.shortmessage.utils.RSA;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
@ -18,6 +23,7 @@ import io.swagger.annotations.ApiParam;
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.chinaunicom.mall.ebtp.extend.shortmessage.entity.BizShortMessage;
|
||||
@ -34,7 +40,9 @@ public class BizShortMessageController{
|
||||
private String privateKey;
|
||||
@Resource
|
||||
private BizShortMessageService iBizShortMessageService;
|
||||
|
||||
@Autowired(required = false)
|
||||
@Qualifier("cacheRedisTemplate")
|
||||
private RedisTemplate<String ,Object> redisTemplate;
|
||||
/**
|
||||
* 认证短信验证码发送
|
||||
* appCode 应用标识
|
||||
@ -45,12 +53,25 @@ public class BizShortMessageController{
|
||||
* authCode 验证码
|
||||
* callbackUrl UrlEncode编码 应用系统回调确认用户有效性的地址,应用系统传了这个地址则用户有效性由该地址确定
|
||||
*/
|
||||
@Idempotent(expireTime = 30,timeUnit = TimeUnit.SECONDS,info = "距离上次解密时间需间隔30秒",delKey =true)
|
||||
@PostMapping("/send/authCode")
|
||||
public BaseResponse<Boolean> authCodeSend(@RequestBody AuthCodeVo vo){
|
||||
|
||||
|
||||
log.info("解密前:"+vo.getMobile());
|
||||
String value = RSA.decrypt(vo.getMobile(),privateKey);
|
||||
log.info("解密后:"+value);
|
||||
String key = "mobile_code:" + value;
|
||||
Object tokenValue = redisTemplate.opsForValue().get(key);
|
||||
if (tokenValue != null) {
|
||||
CommonExceptionEnum.FRAME_EXCEPTION_COMMON_DATA_OTHER_ERROR.assertNotNullByKey("验证码尚未失效",true);
|
||||
}else{
|
||||
Boolean b = iBizShortMessageService.authCodeSend(value);
|
||||
if(b){
|
||||
Map<String, Object> map = JSONArray.parseObject(JSONArray.toJSONString(vo), Map.class);
|
||||
redisTemplate.opsForHash().putAll("mobile_code:" + value, map);
|
||||
redisTemplate.expire(key,30,TimeUnit.SECONDS);
|
||||
}
|
||||
}
|
||||
return BaseResponse.success(iBizShortMessageService.authCodeSend(value));
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user