Browse Source

API Keys生成方式优化

Bob 2 years ago
parent
commit
fc843fe55c

+ 23 - 0
background-common/src/main/java/cn/kdan/compdf/enums/APIKeysEnum.java

@@ -0,0 +1,23 @@
+package cn.kdan.compdf.enums;
+
+/**
+ * @author Bob 2022-10-18
+ **/
+public interface APIKeysEnum {
+
+    /**
+     * 默认项目
+     */
+    String DEFAULT_PROJECT = "Default Project";
+
+    /**
+     * 项目公钥
+     */
+    String PUBLIC_KEY = "public_key_";
+
+    /**
+     * 项目密钥
+     */
+    String SECRET_KEY = "secret_key_";
+
+}

+ 17 - 5
background-user/src/main/java/cn/kdan/compdf/service/impl/BackgroundUserProjectServiceImpl.java

@@ -8,6 +8,7 @@ import cn.hutool.json.JSONUtil;
 import cn.kdan.compdf.dto.AddNewProjectDTO;
 import cn.kdan.compdf.dto.EditProjectDTO;
 import cn.kdan.compdf.entity.BackgroundUserProject;
+import cn.kdan.compdf.enums.APIKeysEnum;
 import cn.kdan.compdf.enums.DateTImeFormatEnum;
 import cn.kdan.compdf.enums.RabbitMQEnum;
 import cn.kdan.compdf.exception.BusinessException;
@@ -95,8 +96,8 @@ public class BackgroundUserProjectServiceImpl extends ServiceImpl<BackgroundUser
         BackgroundUserProject backgroundUserProject = new BackgroundUserProject();
         BeanUtil.copyProperties(addNewProjectDTO, backgroundUserProject);
         backgroundUserProject.setTenantId(addNewProjectDTO.getTenantId());
-        backgroundUserProject.setProjectKey(MD5Util.MD5Encode(UUID.randomUUID().toString()));
-        backgroundUserProject.setSecretKey(MD5Util.MD5Encode(UUID.randomUUID().toString()));
+        backgroundUserProject.setProjectKey(APIKeysEnum.PUBLIC_KEY + MD5Util.MD5Encode(UUID.randomUUID().toString()));
+        backgroundUserProject.setSecretKey(APIKeysEnum.SECRET_KEY + MD5Util.MD5Encode(UUID.randomUUID().toString()));
         backgroundUserProject.setStatus(1);
         this.baseMapper.insert(backgroundUserProject);
         // 发送消息同步SaaS服务
@@ -110,11 +111,22 @@ public class BackgroundUserProjectServiceImpl extends ServiceImpl<BackgroundUser
      */
     @Override
     public void defaultProject(Long userId) {
+        // 验证是否已生成默认项目
+        LambdaQueryWrapper<BackgroundUserProject> eq = new LambdaQueryWrapper<BackgroundUserProject>()
+                .eq(BackgroundUserProject::getStatus, 1)
+                .eq(BackgroundUserProject::getUserId, userId)
+                .eq(BackgroundUserProject::getProjectName, APIKeysEnum.DEFAULT_PROJECT);
+        Long selectCount = baseMapper.selectCount(eq);
+        // 已生成退出
+        if (selectCount > 0) {
+            return;
+        }
+        // 新增
         BackgroundUserProject backgroundUserProject = new BackgroundUserProject();
         backgroundUserProject.setUserId(userId);
-        backgroundUserProject.setProjectName("Default Project");
-        backgroundUserProject.setProjectKey(MD5Util.MD5Encode(UUID.randomUUID().toString()));
-        backgroundUserProject.setSecretKey(MD5Util.MD5Encode(UUID.randomUUID().toString()));
+        backgroundUserProject.setProjectName(APIKeysEnum.DEFAULT_PROJECT);
+        backgroundUserProject.setProjectKey(APIKeysEnum.PUBLIC_KEY + MD5Util.MD5Encode(UUID.randomUUID().toString()));
+        backgroundUserProject.setSecretKey(APIKeysEnum.SECRET_KEY + MD5Util.MD5Encode(UUID.randomUUID().toString()));
         backgroundUserProject.setStatus(1);
         this.baseMapper.insert(backgroundUserProject);
         // 发送消息同步SaaS服务

+ 6 - 2
background-user/src/main/java/cn/kdan/compdf/service/impl/BackgroundUserServiceImpl.java

@@ -10,6 +10,7 @@ import cn.kdan.compdf.enums.AuthEnum;
 import cn.kdan.compdf.enums.ResponseEnum;
 import cn.kdan.compdf.exception.BusinessException;
 import cn.kdan.compdf.mapper.BackgroundUserMapper;
+import cn.kdan.compdf.service.BackgroundUserProjectService;
 import cn.kdan.compdf.service.BackgroundUserService;
 import cn.kdan.compdf.utils.MD5Util;
 import cn.kdan.compdf.utils.TokenUtil;
@@ -22,10 +23,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
-import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.stereotype.Service;
 
-import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.concurrent.TimeUnit;
@@ -39,6 +38,8 @@ public class BackgroundUserServiceImpl extends ServiceImpl<BackgroundUserMapper,
 
     @Autowired
     private StringRedisTemplate redisTemplate;
+    @Autowired
+    private BackgroundUserProjectService backgroundUserProjectService;
 
     @Override
     public IPage<BackgroundUser> page(BackgroundUser query) {
@@ -65,10 +66,13 @@ public class BackgroundUserServiceImpl extends ServiceImpl<BackgroundUserMapper,
                 .build());
         log.info("用户登录成功:username:{},time:{}", loginDTO.getUsername(), new Date());
 
+        // 设置token过期时间
         redisTemplate.opsForValue().set(AuthEnum.USER_TOKEN_REDIS + token, token, AuthEnum.EXPIRE, TimeUnit.HOURS);
 
         //更新登录用户的登陆时间
         if (backgroundUser.getFirstLoginTime() == null) {
+            // 首次登录创建默认项目
+            backgroundUserProjectService.defaultProject(backgroundUser.getId());
             backgroundUser.setFirstLoginTime(LocalDateTime.now());
         }
         backgroundUser.setLastLoginTime(new Date());