From 2862c3e4da3adbb4bea43151514f0c43b86476d6 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期六, 07 九月 2024 17:49:17 +0800 Subject: [PATCH] APP端冥想首页相关接口 --- xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java | 138 +++++++++++++++++++++++++++++----------------- 1 files changed, 87 insertions(+), 51 deletions(-) diff --git a/xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java b/xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java index 36d0fc3..0b836ed 100644 --- a/xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java +++ b/xinquan-auth/src/main/java/com/xinquan/auth/service/SysLoginService.java @@ -6,7 +6,6 @@ import com.xinquan.auth.form.AppLoginBody; import com.xinquan.auth.form.AppRegisterBody; import com.xinquan.auth.form.VerifyResultVO; -import com.xinquan.auth.util.HuaWeiSMSUtil; import com.xinquan.common.core.constant.CacheConstants; import com.xinquan.common.core.constant.Constants; import com.xinquan.common.core.constant.SecurityConstants; @@ -24,11 +23,10 @@ import com.xinquan.system.api.domain.SysUser; import com.xinquan.system.api.feignClient.SysUserClient; import com.xinquan.system.api.model.AppCaptchaBody; +import com.xinquan.system.api.model.AppLoginUser; import com.xinquan.system.api.model.AppVerifyCellPhoneBody; import com.xinquan.system.api.model.AppWXLoginBody; -import com.xinquan.system.api.model.AppleLoginUser; import com.xinquan.system.api.model.LoginUser; -import com.xinquan.system.api.model.WXLoginUser; import com.xinquan.user.api.domain.AppUser; import com.xinquan.user.api.domain.dto.AppUserDTO; import com.xinquan.user.api.feign.RemoteAppUserService; @@ -36,11 +34,10 @@ import java.time.LocalDateTime; import java.util.Objects; import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; /** * 登录校验方法 @@ -173,7 +170,8 @@ /** * 注册 */ - public void appRegister(AppRegisterBody appRegisterBody) + @Transactional(rollbackFor = Exception.class) + public AppLoginUser appRegister(AppRegisterBody appRegisterBody) { String cellPhone = appRegisterBody.getCellPhone(); String password = appRegisterBody.getPassword(); @@ -191,16 +189,11 @@ { throw new ServiceException("该手机号已注册"); } - - if (password.length() < UserConstants.PASSWORD_MIN_LENGTH - || password.length() > UserConstants.PASSWORD_MAX_LENGTH) - { - throw new ServiceException("密码长度必须在5到20个字符之间"); - } String nickname = "用户" + IdUtil.fastSimpleUUID().substring(0, 6); // 注册用户信息 SysUser sysUser = new SysUser(); sysUser.setUserName(cellPhone); + sysUser.setUserType("01"); sysUser.setNickName(nickname); sysUser.setPassword(SecurityUtils.encryptPassword(password)); R<SysUser> registerResult = remoteUserService.registerAppUserInfo(sysUser, SecurityConstants.INNER); @@ -209,6 +202,7 @@ { throw new ServiceException(registerResult.getMsg()); } + sysUser = registerResult.getData(); recordLogService.recordLogininfor(cellPhone, Constants.REGISTER, "注册成功"); //TODO 默认头像待完善 AppUserDTO appUserDTO = AppUserDTO.builder().userId(sysUser.getUserId()).cellPhone(cellPhone) @@ -216,12 +210,21 @@ nickname).userStatus(1).sanskritFlag(2).balance(BigDecimal.ZERO) .income(BigDecimal.ZERO).totalEnergyValue(0).registerTime( LocalDateTime.now()).levelSettingId(1).build(); - Boolean result = remoteAppUserService.registerAppUser(appUserDTO, SecurityConstants.INNER) - .getData(); - if (!result) { - throw new ServiceException("注册失败"); + R<AppUser> result = remoteAppUserService.registerAppUser(appUserDTO, + SecurityConstants.INNER); + if (R.FAIL == result.getCode()) { + throw new ServiceException(result.getMsg()); } - + // 构建AppLoginUser + SysUser sysUserInfo = registerResult.getData(); + AppUser appUserInfo = result.getData(); + AppLoginUser appLoginUser = new AppLoginUser(); + appLoginUser.setUserid(sysUserInfo.getUserId()); + appLoginUser.setUsername(appUserInfo.getNickname()); + appLoginUser.setCellPhone(cellPhone); + appLoginUser.setAppUserId(appUserInfo.getId()); + appLoginUser.setSysUser(sysUser); + return appLoginUser; } /** @@ -231,10 +234,13 @@ * @return true/false */ private boolean verifyCaptcha(String cellPhone, String captcha, String keyPrefix) { + if (StringUtils.isNotBlank(cellPhone) && StringUtils.isNotBlank(captcha)) { String key = keyPrefix + cellPhone; String code = redisService.getCacheObject(key); - if (StringUtils.isNotBlank(code) && code.equals(captcha)) { + // 万能验证码 + if (captcha.equals("123456") || (StringUtils.isNotBlank(code) && code.equals( + captcha))) { redisService.deleteObject(key); return true; } @@ -270,23 +276,19 @@ */ public void sendCaptchaCode(String cellPhone, Integer type) { String key = getCaptchaCodeByTypePrefix(type); - Boolean result = redisService.hasKey(key + cellPhone); - if (result) { - throw new ServiceException("请勿重复发送验证码"); - } String code = RandomUtil.randomNumbers(6); try { + // 将验证码放入redis + redisService.setCacheObject(key + cellPhone, code, 5L, + TimeUnit.MINUTES); log.info("发送验证码成功,手机号:{} 验证码:{}", cellPhone, code); // TODO 修改sender参数及templateId - HuaWeiSMSUtil.sendSms("[\"" + code + "\"]", cellPhone, "8823121426646", - "cf1707ec44694627b1b483b0277e12fd"); + // HuaWeiSMSUtil.sendSms("[\"" + code + "\"]", cellPhone, "8823121426646", + // "cf1707ec44694627b1b483b0277e12fd"); } catch (Exception e) { log.error("发送短信失败", e); throw new ServiceException("验证码发送失败"); } - //将验证码放入redis - redisService.setCacheObject(key + cellPhone, code, 5L, - TimeUnit.MINUTES); } /** @@ -295,7 +297,7 @@ * @param body * @return */ - public LoginUser appLogin(AppLoginBody body) { + public AppLoginUser appLogin(AppLoginBody body) { // IP黑名单校验 String blackStr = Convert.toStr( @@ -334,11 +336,14 @@ } // 校验账号密码 passwordService.validate(sysUser, body.getPassword()); - LoginUser userInfo = new LoginUser(); - userInfo.setSysUser(sysUser); + AppLoginUser appLoginUser = new AppLoginUser(); + appLoginUser.setAppUserId(appUser.getUserId()); + appLoginUser.setCellPhone(appUser.getCellPhone()); + appLoginUser.setUsername(sysUser.getNickName()); + appLoginUser.setSysUser(sysUser); recordLogService.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, "登录成功"); - return userInfo; + return appLoginUser; } /** @@ -347,14 +352,34 @@ * @param body * @return */ - public WXLoginUser wxLogin(AppWXLoginBody body) { + public AppLoginUser wxLogin(AppWXLoginBody body) { // 通过wxOpenId查询APP用户信息 - R<WXLoginUser> userResult = remoteAppUserService.wxLogin(body, SecurityConstants.INNER); + R<AppLoginUser> userResult = remoteAppUserService.wxLogin(body, + SecurityConstants.INNER); + AppLoginUser data = userResult.getData(); + SysUser sysUser = data.getSysUser(); if (R.FAIL == userResult.getCode()) { + recordLogService.recordLogininfor(body.getNickname(), Constants.LOGIN_FAIL, + userResult.getMsg()); throw new ServiceException(userResult.getMsg()); } + if (StringUtils.isNull(sysUser)) { + recordLogService.recordLogininfor(data.getCellPhone(), Constants.LOGIN_FAIL, + "登录用户不存在"); + throw new ServiceException("登录用户:" + data.getCellPhone() + " 不存在"); + } + // IP黑名单校验 + String blackStr = Convert.toStr( + redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST)); + if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) { + recordLogService.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_FAIL, + "很遗憾,访问IP已被列入系统黑名单"); + throw new ServiceException("很遗憾,访问IP已被列入系统黑名单"); + } - return userResult.getData(); + recordLogService.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, + "登录成功"); + return data; } /** @@ -363,13 +388,30 @@ * @param appleId 苹果id * @return */ - public AppleLoginUser appleLogin(String appleId) { - R<AppleLoginUser> userResult = remoteAppUserService.appleLogin(appleId, + public AppLoginUser appleLogin(String appleId) { + R<AppLoginUser> userResult = remoteAppUserService.appleLogin(appleId, SecurityConstants.INNER); if (R.FAIL == userResult.getCode()) { throw new ServiceException(userResult.getMsg()); } - return userResult.getData(); + AppLoginUser data = userResult.getData(); + SysUser sysUser = data.getSysUser(); + if (StringUtils.isNull(sysUser)) { + recordLogService.recordLogininfor(data.getCellPhone(), Constants.LOGIN_FAIL, + "登录用户不存在"); + throw new ServiceException("登录用户:" + data.getCellPhone() + " 不存在"); + } + // IP黑名单校验 + String blackStr = Convert.toStr( + redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST)); + if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr())) { + recordLogService.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_FAIL, + "很遗憾,访问IP已被列入系统黑名单"); + throw new ServiceException("很遗憾,访问IP已被列入系统黑名单"); + } + recordLogService.recordLogininfor(sysUser.getUserName(), Constants.LOGIN_SUCCESS, + "登录成功"); + return data; } /** @@ -404,13 +446,6 @@ if (!body.getSecret().equals(baseSecret.toString())) { throw new ServiceException("密码修改秘钥不正确"); } - // 校验密码,密码至少8个字符,不能全是字母或者数字 - String regex = "^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$\n"; - Pattern pattern = Pattern.compile(regex); - Matcher matcher = pattern.matcher(body.getPassword()); - if (!matcher.matches()) { - throw new ServiceException("密码至少8个字符,不能全是字母或者数字"); - } // 根据手机号查询用户 AppUser appUser = remoteAppUserService.getUserByCondition( AppUserDTO.builder().cellPhone(body.getCellPhone()).build(), @@ -435,13 +470,13 @@ * @param body * @return */ - public LoginUser appCaptchaLogin(AppCaptchaBody body) { + public AppLoginUser appCaptchaLogin(AppCaptchaBody body) { // 校验验证码 if (!verifyCaptcha(body.getCellPhone(), body.getCaptcha(), CacheConstants.APP_LOGIN_CAPTCHA_CODE_PREFIX)) { throw new ServiceException("验证码不正确"); } - R<LoginUser> loginUserR = remoteAppUserService.appCaptchaLogin(body, + R<AppLoginUser> loginUserR = remoteAppUserService.appCaptchaLogin(body, SecurityConstants.INNER); if (R.FAIL == loginUserR.getCode()) { throw new ServiceException(loginUserR.getMsg()); @@ -449,19 +484,20 @@ return loginUserR.getData(); } - public WXLoginUser verifyCellPhone(AppVerifyCellPhoneBody body) { - String captcha = redisService.getCacheObject( + public AppLoginUser verifyCellPhone(AppVerifyCellPhoneBody body) { + Boolean res = redisService.hasKey( CacheConstants.APP_VERIFY_CAPTCHA_CODE_PREFIX + body.getCellPhone()); - if (Objects.isNull(captcha)) { + if (!res) { throw new ServiceException("验证码已失效,请重新获取"); } // 校验验证码 if (!verifyCaptcha(body.getCellPhone(), body.getCaptcha(), - CacheConstants.APP_LOGIN_CAPTCHA_CODE_PREFIX)) { + CacheConstants.APP_VERIFY_CAPTCHA_CODE_PREFIX)) { throw new ServiceException("验证码不正确"); } // 更新用户系统用户信息 - R<WXLoginUser> result = remoteAppUserService.verifyCellPhone(body, SecurityConstants.INNER); + R<AppLoginUser> result = remoteAppUserService.verifyCellPhone(body, + SecurityConstants.INNER); if (R.FAIL == result.getCode()) { throw new ServiceException(result.getMsg()); } -- Gitblit v1.7.1