Merge #49 into master from cc_20260302_login_password

验证码登录

* cc_20260302_login_password: (3 commits squashed)

  - fix:新增验证码登录,发送验证码,修改密码接口

  - fix

  - fix

Signed-off-by: 王非凡 <accounts_67eba0c5fee9c49c80c8e2b4@mail.teambition.com>
Merged-by: 正新 <accounts_6964c7bcd2a2c377c5bbd01b@mail.teambition.com>

CR-link: https://codeup.aliyun.com/692ea314dec569489f6f167c/hangzhou/java/custom_zxjp/change/49
This commit is contained in:
王非凡
2026-03-03 03:29:16 +00:00
committed by 正新
parent 7916851939
commit 64192e3a1d
20 changed files with 507 additions and 15 deletions

View File

@@ -55,7 +55,10 @@ public class TokenValidateFilter implements Filter {
"/zxjp/**/api/license",
"/zxjp/pc/v3/login/accountLogin",
"/zxjp/pc/v3/login/refreshLogin",
"/zxjp/ws/**"
"/zxjp/ws/**",
"/zxjp/pc/v3/login/sendSmsCode",
"/zxjp/pc/v3/login/sendSmsCode/test",
"/zxjp/pc/v3/login/modifyPassword"
);

View File

@@ -1,17 +1,30 @@
package com.cool.store.controller.webb;
import com.cool.store.dto.login.ModifyPasswordDTO;
import com.cool.store.dto.login.UserLoginDTO;
import com.cool.store.dto.login.UserRefreshLoginDTO;
import com.cool.store.dto.sms.SendSmsCodeDTO;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.enterprise.EnterpriseUserService;
import com.cool.store.service.login.LoginBaseService;
import com.cool.store.service.login.LoginStrategy;
import com.cool.store.service.sms.AliyunSmsService;
import com.cool.store.utils.HttpHelper;
import com.cool.store.utils.RedisUtilPool;
import com.cool.store.utils.SpringContextUtil;
import com.cool.store.vo.login.UserLoginVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.time.LocalDate;
import static com.cool.store.service.sms.impl.AliyunSmsServiceImpl.getRandNum;
/**
* <p>
* 登录 前端控制器
@@ -25,17 +38,24 @@ import org.springframework.web.bind.annotation.*;
@RequestMapping("/pc/v3/login")
@RequiredArgsConstructor
public class LoginController {
private final LoginBaseService loginBaseService;
@Resource(name = "passwordLoginServiceImpl")
private LoginBaseService loginBaseService;
private final EnterpriseUserService enterpriseUserService;
private final RedisUtilPool redisUtilPool;
private final AliyunSmsService aliyunSmsService;
@ApiOperation("账号密码登录")
private final int SEND_SMS_LIMIT_COUNT = 10;
private final int SEND_SMS_IP_LIMIT_COUNT = 100;
@ApiOperation("登录")
@PostMapping("/accountLogin")
public ResponseResult<UserLoginVO> accountLogin(@RequestBody UserLoginDTO param) {
public ResponseResult accountLogin(@RequestBody UserLoginDTO param) {
return SpringContextUtil.getBean(param.getLoginType().getClazzName(), LoginStrategy.class).login(param);
}
@ApiOperation("refresh登录")
@PostMapping("/refreshLogin")
public ResponseResult<UserLoginVO> refreshLogin(@RequestBody UserRefreshLoginDTO param) {
public ResponseResult refreshLogin(@RequestBody UserRefreshLoginDTO param) {
return loginBaseService.refreshLogin(param);
}
@@ -44,4 +64,36 @@ public class LoginController {
public ResponseResult logout() {
return loginBaseService.logout();
}
@ApiOperation("修改密码")
@PostMapping("/modifyPassword")
public ResponseResult modifyPassword(@Validated @RequestBody ModifyPasswordDTO param) {
return enterpriseUserService.modifyPassword(param);
}
@ApiOperation("发送验证码")
@PostMapping("/sendSmsCode")
public ResponseResult sendSmsCode(@Validated @RequestBody SendSmsCodeDTO param, HttpServletRequest request) {
//一天同一个手机号限制发送10条短信
String codeKey = "sendSmsCode_" + LocalDate.now() + ":" + param.getMobile();
Long sendCount = redisUtilPool.incrby(codeKey, 1, 24 * 60 * 60);
if (sendCount > SEND_SMS_LIMIT_COUNT) {
return ResponseResult.fail(ErrorCodeEnum.SEND_SMS_LIMIT_COUNT);
}
String ip = HttpHelper.getIpAddr(request);
String ipCacheKey = "sendSmsCode_IP_" + LocalDate.now() + ":" + ip;
Long ipSendCount = redisUtilPool.incrby(ipCacheKey, 1, 24 * 60 * 60);
if (ipSendCount > SEND_SMS_IP_LIMIT_COUNT) {
return ResponseResult.fail(ErrorCodeEnum.SEND_SMS_LIMIT_COUNT);
}
return aliyunSmsService.sendSmsCode(param.getMobile(), param.getCodeType());
}
@ApiOperation("测试发送验证码")
@PostMapping("/sendSmsCode/test")
public ResponseResult sendSmsCodeTest(@Validated @RequestBody SendSmsCodeDTO param){
String smsCode = getRandNum();
redisUtilPool.setString(param.getCodeType() + ":" + param.getMobile(), smsCode, param.getCodeType().getCacheSeconds());
return ResponseResult.success(smsCode);
}
}