diff --git a/core/api/src/main/java/com/wansenai/api/user/SysUserController.java b/core/api/src/main/java/com/wansenai/api/user/SysUserController.java index 8afb37a..8f29db8 100644 --- a/core/api/src/main/java/com/wansenai/api/user/SysUserController.java +++ b/core/api/src/main/java/com/wansenai/api/user/SysUserController.java @@ -54,6 +54,11 @@ public class SysUserController { return userService.accountLogin(accountLoginDto); } + @PostMapping(value = "loginNoCode") + public Response loginNoCode(@RequestBody AccountLoginDTO accountLoginDto) { + return userService.loginNoCode(accountLoginDto); + } + @PostMapping(value = "mobileLogin") public Response mobileLogin(@RequestBody MobileLoginDTO mobileLoginDto) { return userService.mobileLogin(mobileLoginDto); diff --git a/core/api/src/main/resources/application-dev.yml b/core/api/src/main/resources/application-dev.yml index 1a94d22..eabeb60 100644 --- a/core/api/src/main/resources/application-dev.yml +++ b/core/api/src/main/resources/application-dev.yml @@ -13,6 +13,7 @@ spring: redis: host: 58.49.150.163 port: 6379 + username: default password: Clunt@12345 jedis: pool: @@ -20,4 +21,4 @@ spring: max-wait: 100 max-idle: 20 min-idle: 5 - timeout: 10000 \ No newline at end of file + timeout: 10000 diff --git a/core/middleware/src/main/java/com/wansenai/middleware/security/JWTConfig.java b/core/middleware/src/main/java/com/wansenai/middleware/security/JWTConfig.java index 1cfe2f4..0fdb867 100644 --- a/core/middleware/src/main/java/com/wansenai/middleware/security/JWTConfig.java +++ b/core/middleware/src/main/java/com/wansenai/middleware/security/JWTConfig.java @@ -33,6 +33,7 @@ public class JWTConfig implements WebMvcConfigurer { .excludePathPatterns("/v2/common/captcha") .excludePathPatterns("/user/register") .excludePathPatterns("/user/login") + .excludePathPatterns("/user/loginNoCode") .excludePathPatterns("/user/mobileLogin") .excludePathPatterns("/user/updatePassword") .excludePathPatterns("/user/updatePasswordByEmail") diff --git a/core/service/src/main/java/com/wansenai/service/tenant/impl/SysTenantServiceImpl.java b/core/service/src/main/java/com/wansenai/service/tenant/impl/SysTenantServiceImpl.java index cb3daec..1d781cc 100644 --- a/core/service/src/main/java/com/wansenai/service/tenant/impl/SysTenantServiceImpl.java +++ b/core/service/src/main/java/com/wansenai/service/tenant/impl/SysTenantServiceImpl.java @@ -303,7 +303,7 @@ public class SysTenantServiceImpl extends ServiceImpl= tenant.getUserNumLimit()) { + if (tenant != null && tenant.getUserNumLimit() != 0 && userNum >= tenant.getUserNumLimit()) { var systemLanguage = sysUserService.getUserSystemLanguage(sysUserService.getCurrentUserId()); if ("zh_CN".equals(systemLanguage)) { return Response.responseMsg(TenantCodeEnum.TENANT_USER_NUM_LIMIT); diff --git a/core/service/src/main/java/com/wansenai/service/user/ISysUserService.java b/core/service/src/main/java/com/wansenai/service/user/ISysUserService.java index 2465f92..8d7deea 100644 --- a/core/service/src/main/java/com/wansenai/service/user/ISysUserService.java +++ b/core/service/src/main/java/com/wansenai/service/user/ISysUserService.java @@ -35,6 +35,8 @@ public interface ISysUserService extends IService { Response accountLogin(AccountLoginDTO accountLoginDto); + Response loginNoCode(AccountLoginDTO accountLoginDto); + Response mobileLogin(MobileLoginDTO mobileLoginDto); Response emailLogin(EmailLoginDTO emailLoginDTO); diff --git a/core/service/src/main/java/com/wansenai/service/user/impl/SysUserServiceImpl.java b/core/service/src/main/java/com/wansenai/service/user/impl/SysUserServiceImpl.java index 50c1307..f5ece95 100644 --- a/core/service/src/main/java/com/wansenai/service/user/impl/SysUserServiceImpl.java +++ b/core/service/src/main/java/com/wansenai/service/user/impl/SysUserServiceImpl.java @@ -285,7 +285,61 @@ public class SysUserServiceImpl extends ServiceImpl impl } // Check user tenant expiration skip admin var tenant = tenantMapper.selectById(user.getTenantId()); - if (!"admin".equals(accountLoginDto.getUsername()) && tenant.getExpireTime().isBefore(LocalDateTime.now())) { + if (!"admin".equals(accountLoginDto.getUsername()) && tenant != null && tenant.getExpireTime().isBefore(LocalDateTime.now())) { + return Response.responseMsg(TenantCodeEnum.TENANT_EXPIRED); + } + + var token = ""; + if (redisUtil.hasKey(user.getUserName() + ":token")) { + token = String.valueOf(redisUtil.get(user.getUserName() + ":token")); + } else { + // 生成JWT的令牌 + token = jwtUtil.createToken(accountLoginDto.getUsername()); + redisUtil.set(accountLoginDto.getUsername() + ":token", token); + redisUtil.expire(accountLoginDto.getUsername() + ":token", 86400); + // 同时存放userId和userName 租户id + redisUtil.set(token + ":userName", user.getUserName(), 86400); + redisUtil.set(token + ":userId", String.valueOf(user.getId()), 86400); + redisUtil.set(token + ":tenantId", String.valueOf(user.getTenantId()), 86400); + } + + return Response.responseData(UserInfoVO.builder() + .id(user.getId()) + .token(token) + .expire(1694757956L) + .build()); + } + + @Override + public Response loginNoCode(AccountLoginDTO accountLoginDto){ + + var password = ""; + try { + password = CryptoUtils.decryptSymmetrically(SecurityConstants.LOGIN_SECURITY_KEY, null, + accountLoginDto.getPassword(), CryptoUtils.Algorithm.Encryption.AES_ECB_PKCS5); + } catch (Exception e) { + log.error("密码解密失败: " + e.getMessage()); + return Response.responseMsg(UserCodeEnum.USERNAME_OR_PASSWORD_ERROR); + } + var user = lambdaQuery() + .eq(SysUser::getUserName, accountLoginDto.getUsername()) + .eq(SysUser::getPassword, CommonTools.md5Encryp(password)) + .one(); + + if (user == null) { + return Response.responseMsg(UserCodeEnum.USERNAME_OR_PASSWORD_ERROR); + } + + if (user.getStatus() == UserConstants.USER_STATUS_DISABLE) { + return Response.responseMsg(UserCodeEnum.USER_ACCOUNT_FREEZE); + } + + if (user.getDeleteFlag() == CommonConstants.DELETED) { + return Response.responseMsg(UserCodeEnum.USER_ACCOUNT_INVALID); + } + // Check user tenant expiration skip admin + var tenant = tenantMapper.selectById(user.getTenantId()); + if (!"admin".equals(accountLoginDto.getUsername()) && tenant != null && tenant.getExpireTime().isBefore(LocalDateTime.now())) { return Response.responseMsg(TenantCodeEnum.TENANT_EXPIRED); }