Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	backstage-service/pom.xml
Mr.qian 4 days ago
parent
commit
2de1157659

+ 19 - 5
backstage-service/pom.xml

@@ -13,6 +13,8 @@
     <version>1.0.0-SNAPSHOT</version>
     <properties>
         <java.version>1.8</java.version>
+
+        <hutool.version>5.8.22</hutool.version>
     </properties>
 
     <!-- Inherit defaults from Spring Boot -->
@@ -63,9 +65,22 @@
             <scope>test</scope>
         </dependency>
 
+<!--        <dependency>-->
+<!--            <groupId>org.springframework.boot</groupId>-->
+<!--            <artifactId>spring-boot-starter-redis</artifactId>-->
+<!--&lt;!&ndash;            <version>2.7.18</version>&ndash;&gt;-->
+<!--        </dependency>-->
+
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-redis</artifactId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>${hutool.version}</version>
+<!--            <scope>compile</scope>-->
         </dependency>
 
         <dependency>
@@ -75,10 +90,9 @@
         </dependency>
 
         <dependency>
-            <groupId>cn.hutool</groupId>
-            <artifactId>hutool-all</artifactId>
-            <version>RELEASE</version>
-            <scope>compile</scope>
+            <groupId>com.baomidou</groupId>
+            <artifactId>lock4j-redis-template-spring-boot-starter</artifactId>
+            <version>2.2.5</version>
         </dependency>
 
 

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

@@ -71,55 +71,174 @@ public class LoginController {
     @Resource
     private RoleService roleService;
 
+    @NoToken
+    @PostMapping("/testredis")
+    @ApiOperation(value = "testredis", httpMethod = "POST")
+    public Result test(@RequestParam  String a) {
+        long totalStartTime = System.currentTimeMillis();
+        long validationStartTime = 0, dbQueryStartTime = 0;
+        Object o = redisUtil.get(a);
+        validationStartTime = System.currentTimeMillis();
+        log.info("get :"+(validationStartTime - totalStartTime));
+        redisUtil.set(a,a);
+        dbQueryStartTime = System.currentTimeMillis();
+        log.info("set :"+(dbQueryStartTime - validationStartTime));
+        return ResultGenerator.genSuccessResult();
+    }
+
     @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的.
      *

+ 22 - 6
backstage-service/src/main/resources/bootstrap.properties

@@ -5,7 +5,7 @@ spring.web.resources.add-mappings=true
 
 web.white.list=/swagger-resources,/operating/area/list,/operating/area/China/init,/cif/user/report,/report/spectaculars/report
 
-spring.profiles.active=dev
+spring.profiles.active=pro2
 local.nacos=127.0.0.1:8848
 dev.nacos=127.0.0.1:8848
 test.nacos=172.10.100.40:8848
@@ -13,15 +13,19 @@ pro.nacos=172.31.181.53:8848
 pro2.nacos=172.23.247.205:8848
 spring.cloud.nacos.discovery.server-addr=${${spring.profiles.active}.nacos}
 spring.cloud.nacos.config.server-addr=${${spring.profiles.active}.nacos}
+logging.level.com.alibaba.cloud.nacos.client=DEBUG
+logging.level.com.alibaba.cloud.nacos=DEBUG
 #spring.cloud.nacos.config.namespace=7eea2e46-08a2-44b9-b067-51148ee2d71e
+spring.cloud.nacos.config.namespace=
 #spring.cloud.nacos.config.group=dev
+spring.cloud.nacos.config.group=DEFAULT_GROUP
 spring.cloud.nacos.config.prefix=backstage
 spring.cloud.nacos.config.file-extension=properties
 
 #spring.cloud.nacos.config.ext-config[*]
 spring.cloud.nacos.config.extension-configs[0].data-id=mq-${spring.profiles.active}.properties
-spring.cloud.nacos.config.extension-configs[1].data-id=redis-${spring.profiles.active}.properties
-spring.cloud.nacos.config.extension-configs[2].data-id=${spring.application.name}-${spring.profiles.active}.properties
+#spring.cloud.nacos.config.extension-configs[1].data-id=redis-${spring.profiles.active}.properties
+spring.cloud.nacos.config.extension-configs[1].data-id=${spring.application.name}-${spring.profiles.active}.properties
 
 
 # Dubbo ??
@@ -103,8 +107,20 @@ spring.main.allow-circular-references=true
 # Swagger ??
 swagger.resource=cif,operating,report,mall
 
-
-
 spring.messages.basename=i18n/messages,i18n/messages_zh_CN
 spring.messages.encoding=UTF-8
-spring.messages.cache-duration=0
+spring.messages.cache-duration=0
+
+##??redis
+spring.redis.database=0
+spring.redis.host=172.23.247.205
+spring.redis.port=6379
+spring.redis.password=mypassword
+spring.redis.pool.max-active=100
+spring.redis.pool.max-wait=30
+spring.redis.pool.max-idle=200
+spring.redis.pool.min-idle=40
+spring.redis.timeout=5000
+spring.redis.lettuce.pool.max-active=100
+spring.redis.lettuce.pool.max-idle=30
+spring.redis.lettuce.pool.min-idle=10

+ 1 - 0
pom.xml

@@ -9,6 +9,7 @@
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>2.7.18</version>
+        <relativePath/>
     </parent>