mirror of
https://gitee.com/likeadmin/likeadmin_java.git
synced 2026-06-04 08:38:26 +08:00
优化: 短信发送 和 验证码验证功能
This commit is contained in:
@@ -17,7 +17,6 @@ import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
package com.mdd.front.controller;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
||||
import com.mdd.common.core.AjaxResult;
|
||||
import com.mdd.common.entity.system.SystemLogSms;
|
||||
import com.mdd.common.entity.notice.NoticeRecord;
|
||||
import com.mdd.common.enums.NoticeEnum;
|
||||
import com.mdd.common.exception.OperateException;
|
||||
import com.mdd.common.mapper.system.SystemLogSmsMapper;
|
||||
import com.mdd.common.mapper.notice.NoticeRecordMapper;
|
||||
import com.mdd.common.plugin.notice.NoticeDriver;
|
||||
import com.mdd.common.plugin.notice.NoticeParams;
|
||||
import com.mdd.common.plugin.notice.vo.NoticeSmsVo;
|
||||
import com.mdd.common.util.StringUtils;
|
||||
import com.mdd.common.util.ToolsUtils;
|
||||
import com.mdd.front.validate.commons.SmsValidate;
|
||||
@@ -28,7 +28,7 @@ import java.util.Arrays;
|
||||
public class SmsController {
|
||||
|
||||
@Resource
|
||||
SystemLogSmsMapper systemLogSmsMapper;
|
||||
NoticeRecordMapper noticeRecordMapper;
|
||||
|
||||
/**
|
||||
* 发送短信
|
||||
@@ -39,30 +39,28 @@ public class SmsController {
|
||||
*/
|
||||
@PostMapping("/send")
|
||||
public AjaxResult<Object> send(@Validated @RequestBody SmsValidate smsValidate) {
|
||||
Assert.notNull(smsValidate.getMobile(), "mobile参数缺失!");
|
||||
Assert.notNull(smsValidate.getScene(), "scene参数缺失!");
|
||||
|
||||
SystemLogSms systemLogSms = systemLogSmsMapper.selectOne(new QueryWrapper<SystemLogSms>()
|
||||
NoticeRecord noticeRecord = noticeRecordMapper.selectOne(new QueryWrapper<NoticeRecord>()
|
||||
.eq("mobile", smsValidate.getMobile())
|
||||
.eq("scene", smsValidate.getScene())
|
||||
.in("status", Arrays.asList(0, 1))
|
||||
.eq("status", Arrays.asList(NoticeEnum.STATUS_WAIT, NoticeEnum.STATUS_OK))
|
||||
.orderByDesc("id")
|
||||
.last("limit 1"));
|
||||
|
||||
if (StringUtils.isNotNull(systemLogSms)) {
|
||||
if (systemLogSms.getCreateTime() >= (System.currentTimeMillis() / 1000 - 60)){
|
||||
if (StringUtils.isNotNull(noticeRecord)) {
|
||||
if (noticeRecord.getCreateTime() >= (System.currentTimeMillis() / 1000 - 60)){
|
||||
throw new OperateException("操作频繁,请稍后再试!");
|
||||
}
|
||||
}
|
||||
|
||||
NoticeParams params = new NoticeParams()
|
||||
NoticeSmsVo params = new NoticeSmsVo()
|
||||
.setScene(smsValidate.getScene())
|
||||
.setMobile(smsValidate.getMobile())
|
||||
.setExpire(900)
|
||||
.setParams(new String[] {
|
||||
"code:" + ToolsUtils.randomInt(4)
|
||||
});
|
||||
|
||||
(new NoticeDriver()).handle(params);
|
||||
NoticeDriver.handle(params);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ import cn.binarywang.wx.miniapp.api.WxMaService;
|
||||
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Assert;
|
||||
import com.mdd.common.config.GlobalConfig;
|
||||
import com.mdd.common.entity.user.User;
|
||||
import com.mdd.common.entity.user.UserAuth;
|
||||
import com.mdd.common.enums.ClientEnum;
|
||||
@@ -12,6 +11,7 @@ import com.mdd.common.enums.NoticeEnum;
|
||||
import com.mdd.common.exception.OperateException;
|
||||
import com.mdd.common.mapper.user.UserAuthMapper;
|
||||
import com.mdd.common.mapper.user.UserMapper;
|
||||
import com.mdd.common.plugin.notice.NoticeCheck;
|
||||
import com.mdd.common.util.*;
|
||||
import com.mdd.front.config.FrontConfig;
|
||||
import com.mdd.front.service.ILoginService;
|
||||
@@ -128,15 +128,11 @@ public class LoginServiceImpl implements ILoginService {
|
||||
String code = params.get("code").toLowerCase();
|
||||
|
||||
// 校验验证码
|
||||
int typeCode = NoticeEnum.SMS_LOGIN_CODE.getCode();
|
||||
Object smsCode = RedisUtils.get(GlobalConfig.redisSmsCode+typeCode+":"+mobile);
|
||||
if (StringUtils.isNull(smsCode) || !smsCode.toString().equals(code)) {
|
||||
int sceneCode = NoticeEnum.LOGIN_CODE.getCode();
|
||||
if (!NoticeCheck.verify(sceneCode, code)) {
|
||||
throw new OperateException("验证码错误!");
|
||||
}
|
||||
|
||||
// 删除验证码
|
||||
RedisUtils.del(GlobalConfig.redisSmsCode+typeCode+":"+mobile);
|
||||
|
||||
// 查询手机号
|
||||
User user = userMapper.selectOne(new QueryWrapper<User>()
|
||||
.select("id,username,mobile,is_disable")
|
||||
@@ -226,15 +222,11 @@ public class LoginServiceImpl implements ILoginService {
|
||||
String password = forgetPwdValidate.getPassword();
|
||||
|
||||
// 校验验证码
|
||||
int typeCode = NoticeEnum.SMS_FORGOT_PASSWORD_CODE.getCode();
|
||||
Object smsCode = RedisUtils.get(GlobalConfig.redisSmsCode+typeCode+":"+mobile);
|
||||
if (StringUtils.isNull(smsCode) || !smsCode.toString().equals(code)) {
|
||||
int sceneCode = NoticeEnum.FORGOT_PASSWORD_CODE.getCode();
|
||||
if (!NoticeCheck.verify(sceneCode, code)) {
|
||||
throw new OperateException("验证码错误!");
|
||||
}
|
||||
|
||||
// 删除验证码
|
||||
RedisUtils.del(GlobalConfig.redisSmsCode+typeCode+":"+mobile);
|
||||
|
||||
// 查询手机号
|
||||
User user = userMapper.selectOne(new QueryWrapper<User>()
|
||||
.select("id,username,mobile,is_disable")
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.mdd.common.enums.NoticeEnum;
|
||||
import com.mdd.common.exception.OperateException;
|
||||
import com.mdd.common.mapper.user.UserAuthMapper;
|
||||
import com.mdd.common.mapper.user.UserMapper;
|
||||
import com.mdd.common.plugin.notice.NoticeCheck;
|
||||
import com.mdd.common.util.*;
|
||||
import com.mdd.front.LikeFrontThreadLocal;
|
||||
import com.mdd.front.service.IUserService;
|
||||
@@ -214,9 +215,8 @@ public class UserServiceImpl implements IUserService {
|
||||
String code = mobileValidate.getCode().toLowerCase();
|
||||
|
||||
// 校验验证码
|
||||
int typeCode = type.equals("bind") ? NoticeEnum.SMS_BIND_MOBILE_CODE.getCode() : NoticeEnum.SMS_CHANGE_MOBILE_CODE.getCode() ;
|
||||
Object smsCode = RedisUtils.get(GlobalConfig.redisSmsCode+typeCode+":"+mobile);
|
||||
if (StringUtils.isNull(smsCode) || !smsCode.toString().equals(code)) {
|
||||
int sceneCode = type.equals("bind") ? NoticeEnum.BIND_MOBILE_CODE.getCode() : NoticeEnum.CHANGE_MOBILE_CODE.getCode() ;
|
||||
if (!NoticeCheck.verify(sceneCode, code)) {
|
||||
throw new OperateException("验证码错误!");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user