改造短信发送接口

This commit is contained in:
geng.tang@qq.com
2024-01-02 21:33:52 +08:00
parent 2a38f01da7
commit 31edb4775a
32 changed files with 623 additions and 111 deletions

View File

@@ -7,13 +7,13 @@ import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.gson.Gson;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.core.config.ConfigProperties;
import com.gxwebsoft.common.core.enums.ESmsType;
import com.gxwebsoft.common.core.security.JwtSubject;
import com.gxwebsoft.common.core.security.JwtUtil;
import com.gxwebsoft.common.core.utils.CacheClient;
@@ -31,18 +31,23 @@ import com.gxwebsoft.common.system.param.UpdatePasswordParam;
import com.gxwebsoft.common.system.result.CaptchaResult;
import com.gxwebsoft.common.system.result.LoginResult;
import com.gxwebsoft.common.system.service.AccessKeyService;
import com.gxwebsoft.common.system.service.AliSmsService;
import com.gxwebsoft.common.system.service.LoginRecordService;
import com.gxwebsoft.common.system.service.RoleMenuService;
import com.gxwebsoft.common.system.service.UserService;
import com.wf.captcha.SpecCaptcha;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
@@ -59,6 +64,7 @@ import java.util.concurrent.TimeUnit;
@Api(tags = "登录认证")
@RestController
@RequestMapping("/api")
@Slf4j
public class MainController extends BaseController {
@Resource
private ConfigProperties configProperties;
@@ -71,9 +77,9 @@ public class MainController extends BaseController {
@Resource
private CacheClient cacheClient;
@Resource
private StringRedisTemplate stringRedisTemplate;
@Resource
private AccessKeyService accessKeyService;
@Resource
private AliSmsService aliSmsService;
@ApiOperation("用户登录")
@PostMapping("/login")
@@ -205,41 +211,36 @@ public class MainController extends BaseController {
@ApiOperation("短信验证码")
@PostMapping("/sendSmsCaptcha")
public ApiResult<?> sendSmsCaptcha(@RequestBody SmsCaptchaParam param) {
DefaultProfile profile = DefaultProfile.getProfile("regionld", "LTAI5tBWM9dSmEAoQFhNqxqJ", "Dr0BqiKl7eaL1NNKoCd12qKsbgjnum");
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", param.getPhone());
request.putQueryParameter("SignName", "南宁网宿科技");
request.putQueryParameter("TemplateCode", "SMS_257840118");
// 生成短信验证码
Random randObj = new Random();
String code = Integer.toString(100000 + randObj.nextInt(900000));
request.putQueryParameter("TemplateParam", "{\"code\":" + code + "}");
try {
CommonResponse response = client.getCommonResponse(request);
String json = response.getData();
Gson g = new Gson();
HashMap result = g.fromJson(json, HashMap.class);
if("OK".equals(result.get("Message"))) {
cacheClient.set(param.getPhone(),code,5L,TimeUnit.MINUTES);
return success("发送成功",result.get("Message"));
}else{
return fail("发送失败");
public ApiResult<?> sendSmsCaptcha(@RequestBody @Valid SmsCaptchaParam param) {
try {
// User user = getLoginUser();
// param.setTenantId(user.getTenantId());
String code = RandomStringUtils.randomNumeric(6);
param.setTemplateParam("{\"code\":" + code + "}");
ApiResult ret = aliSmsService.sendSms(param);
if(ret.isOk()){
ESmsType type = ESmsType.valueOf(param.getType());
cacheClient.set(type.name() + ":" + param.getPhone(), code,5L,TimeUnit.MINUTES);
}
return success(ret);
} catch (ClientException e) {
log.error(e.getMessage(), e);
return fail("发送出错!");
}
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return fail("发送失败");
}
// @ApiOperation("预警短信")
// @PostMapping("/sendSmsAlert")
// public ApiResult<?> sendSmsAlert(@RequestBody SmsCaptchaParam param) {
// try {
// return aliSmsService.sendSms(param);
// } catch (ClientException e) {
// log.error(e.getMessage(), e);
// return fail("发送出错!");
// }
// }
@OperationLog
@ApiOperation("重置密码")
@PutMapping("/password")
@@ -251,7 +252,7 @@ public class MainController extends BaseController {
return fail("验证码不能为空");
}
// 短信验证码校验
String code = cacheClient.get(user.getPhone(), String.class);
String code = cacheClient.get(ESmsType.LOGIN.name() + ":" + user.getPhone(), String.class);
if (!StrUtil.equals(code,user.getCode())) {
return fail("验证码不正确");
}