linxk 5 giorni fa
parent
commit
6640b8c2ed

+ 136 - 30
backstage-service/src/main/java/com/txz/backstage/web/LoginController.java

@@ -71,55 +71,161 @@ public class LoginController {
     @Resource
     private RoleService roleService;
 
+
+
     @NoToken
     @PostMapping("/login")
-    @ApiOperation(value = "后台登录",httpMethod = "POST")
+    @ApiOperation(value = "后台登录", httpMethod = "POST")
     public Result add(@RequestBody LoginAccountParameters loginParameters) {
-        if(loginParameters == null){
-            return ResultGenerator.genFailResult(ResultCode.OBJECT_IS_NULL);
-        }
-        if(StringUtils.isBlank(loginParameters.getAccount())){
-            return ResultGenerator.genFailResult(ResultCode.ACCOUNT_IS_NULL);
-        }
-        Condition condition = new Condition(User.class);
-        condition.createCriteria().andEqualTo("loginAccount",loginParameters.getAccount());
-        List<User> users = userService.findByCondition(condition);
-        if(CollUtil.isEmpty(users)){
-            return ResultGenerator.genFailResult(ResultCode.USER_IS_NULL);
-        }
-        if(users.size() != 1){
-            return ResultGenerator.genFailResult(ResultCode.USER_IS_ERROR);
-        }
-        User user = users.get(0);
-        if(StrUtil.equals("1",user.getStatus())){
-            return ResultGenerator.genFailResult(ResultCode.LOGIN_USER_STATUS_IS_ERROR);
-        }
-        String pwd2 = SecureUtil.md5(loginParameters.getPwd() + user.getSalt()).toUpperCase();
-        log.error("[密码]"+loginParameters.getAccount() + " :"+pwd2);
-        //		String pwd2 = MD5Util.getMD5((loginParameters.getPwd() + user.getSalt()).toUpperCase());
-        if (StringUtils.equals(user.getPassword().toUpperCase(), pwd2)) {
+        long totalStartTime = System.currentTimeMillis();
+        long validationStartTime = 0, dbQueryStartTime = 0, statusCheckStartTime = 0;
+        long pwdCheckStartTime = 0, tokenCacheStartTime = 0, roleQueryStartTime = 0;
+
+        String account = null;
+
+        try {
+            // 1. 参数校验阶段
+            validationStartTime = System.currentTimeMillis();
+            if (loginParameters == null) {
+                return ResultGenerator.genFailResult(ResultCode.OBJECT_IS_NULL);
+            }
+            if (StringUtils.isBlank(loginParameters.getAccount())) {
+                return ResultGenerator.genFailResult(ResultCode.ACCOUNT_IS_NULL);
+            }
+            account = loginParameters.getAccount();
+            long validationTime = System.currentTimeMillis() - validationStartTime;
+
+            // 2. 数据库查询用户阶段
+            dbQueryStartTime = System.currentTimeMillis();
+            Condition condition = new Condition(User.class);
+            condition.createCriteria().andEqualTo("loginAccount", loginParameters.getAccount());
+            List<User> users = userService.findByCondition(condition);
+            long dbQueryTime = System.currentTimeMillis() - dbQueryStartTime;
+
+            if (CollUtil.isEmpty(users)) {
+                return ResultGenerator.genFailResult(ResultCode.USER_IS_NULL);
+            }
+            if (users.size() != 1) {
+                return ResultGenerator.genFailResult(ResultCode.USER_IS_ERROR);
+            }
+            User user = users.get(0);
+
+            // 3. 用户状态检查
+            statusCheckStartTime = System.currentTimeMillis();
+            if (StrUtil.equals("1", user.getStatus())) {
+                return ResultGenerator.genFailResult(ResultCode.LOGIN_USER_STATUS_IS_ERROR);
+            }
+            long statusCheckTime = System.currentTimeMillis() - statusCheckStartTime;
+
+            // 4. 密码验证阶段
+            pwdCheckStartTime = System.currentTimeMillis();
+            String pwd2 = SecureUtil.md5(loginParameters.getPwd() + user.getSalt()).toUpperCase();
+            long pwdCheckTime = System.currentTimeMillis() - pwdCheckStartTime;
+
+            log.error("[密码]" + loginParameters.getAccount() + " :" + pwd2);
+
+            if (!StringUtils.equals(user.getPassword().toUpperCase(), pwd2)) {
+                return ResultGenerator.genFailResult(ResultCode.UNLOGIN_PWD_ERROR);
+            }
+
+            // 5. Token生成和缓存阶段
+            tokenCacheStartTime = System.currentTimeMillis();
             String token = StrUtil.uuid();
             CacheKey key = CacheKey.generateKey(CacheType.UserConfig, token);
             user.setToken(token);
-            //设置redis缓存1小时
+            // 设置redis缓存7天
             redisUtil.set(key.toString(), JSONUtil.toJsonStr(user), 7, TimeUnit.DAYS);
             user.setPassword("***");
             user.setSalt("***");
+            long tokenCacheTime = System.currentTimeMillis() - tokenCacheStartTime;
+
+            // 6. 角色查询阶段
+            roleQueryStartTime = System.currentTimeMillis();
             condition = new Condition(UserRole.class);
-            condition.createCriteria().andEqualTo("userId",user.getId());
+            condition.createCriteria().andEqualTo("userId", user.getId());
             List<UserRole> userRoles = userRoleService.findByCondition(condition);
-            if (CollUtil.isNotEmpty(userRoles)){
+            if (CollUtil.isNotEmpty(userRoles)) {
                 Role role = roleService.findById(userRoles.get(0).getRoleId());
-                if (role != null){
+                if (role != null) {
                     user.setRoleName(role.getName());
                 }
             }
+            long roleQueryTime = System.currentTimeMillis() - roleQueryStartTime;
+
+            // 计算总耗时
+            long totalTime = System.currentTimeMillis() - totalStartTime;
+
+            // 记录性能日志
+            log.info("[登录成功] 账号: " + account +
+                    " | 耗时统计: 参数校验=" + validationTime + "ms" +
+                    ", 用户查询=" + dbQueryTime + "ms" +
+                    ", 状态检查=" + statusCheckTime + "ms" +
+                    ", 密码验证=" + pwdCheckTime + "ms" +
+                    ", Token缓存=" + tokenCacheTime + "ms" +
+                    ", 角色查询=" + roleQueryTime + "ms" +
+                    ", 总耗时=" + totalTime + "ms");
+
             return ResultGenerator.genSuccessResult(user);
-        } else {
-            return ResultGenerator.genFailResult(ResultCode.UNLOGIN_PWD_ERROR);
+
+        } catch (Exception e) {
+            long totalTime = System.currentTimeMillis() - totalStartTime;
+            log.error("[登录异常] 账号: " + account +
+                    ", 总耗时: " + totalTime + "ms" +
+                    ", 错误信息: " + e.getMessage(), e);
+            return ResultGenerator.genFailResult(ResultCode.INTERNAL_SERVER_ERROR);
         }
     }
 
+//    @NoToken
+//    @PostMapping("/login")
+//    @ApiOperation(value = "后台登录",httpMethod = "POST")
+//    public Result add(@RequestBody LoginAccountParameters loginParameters) {
+//
+//        if(loginParameters == null){
+//            return ResultGenerator.genFailResult(ResultCode.OBJECT_IS_NULL);
+//        }
+//        if(StringUtils.isBlank(loginParameters.getAccount())){
+//            return ResultGenerator.genFailResult(ResultCode.ACCOUNT_IS_NULL);
+//        }
+//        Condition condition = new Condition(User.class);
+//        condition.createCriteria().andEqualTo("loginAccount",loginParameters.getAccount());
+//        List<User> users = userService.findByCondition(condition);
+//        if(CollUtil.isEmpty(users)){
+//            return ResultGenerator.genFailResult(ResultCode.USER_IS_NULL);
+//        }
+//        if(users.size() != 1){
+//            return ResultGenerator.genFailResult(ResultCode.USER_IS_ERROR);
+//        }
+//        User user = users.get(0);
+//        if(StrUtil.equals("1",user.getStatus())){
+//            return ResultGenerator.genFailResult(ResultCode.LOGIN_USER_STATUS_IS_ERROR);
+//        }
+//        String pwd2 = SecureUtil.md5(loginParameters.getPwd() + user.getSalt()).toUpperCase();
+//        log.error("[密码]"+loginParameters.getAccount() + " :"+pwd2);
+//        //		String pwd2 = MD5Util.getMD5((loginParameters.getPwd() + user.getSalt()).toUpperCase());
+//        if (StringUtils.equals(user.getPassword().toUpperCase(), pwd2)) {
+//            String token = StrUtil.uuid();
+//            CacheKey key = CacheKey.generateKey(CacheType.UserConfig, token);
+//            user.setToken(token);
+//            //设置redis缓存1小时
+//            redisUtil.set(key.toString(), JSONUtil.toJsonStr(user), 7, TimeUnit.DAYS);
+//            user.setPassword("***");
+//            user.setSalt("***");
+//            condition = new Condition(UserRole.class);
+//            condition.createCriteria().andEqualTo("userId",user.getId());
+//            List<UserRole> userRoles = userRoleService.findByCondition(condition);
+//            if (CollUtil.isNotEmpty(userRoles)){
+//                Role role = roleService.findById(userRoles.get(0).getRoleId());
+//                if (role != null){
+//                    user.setRoleName(role.getName());
+//                }
+//            }
+//            return ResultGenerator.genSuccessResult(user);
+//        } else {
+//            return ResultGenerator.genFailResult(ResultCode.UNLOGIN_PWD_ERROR);
+//        }
+//    }
+
     /**
      * 通过userId获取菜单,需要TOKEN的.
      *