TRX 1 gadu atpakaļ
vecāks
revīzija
481675c568
17 mainītis faili ar 664 papildinājumiem un 1 dzēšanām
  1. 39 0
      SecretKeyClient/src/main/java/com/zhongshu/secretKey/client/model/secret/SecretKeyModel.java
  2. 21 0
      SecretKeyClient/src/main/java/com/zhongshu/secretKey/client/model/secret/SecretKeyParam.java
  3. 29 0
      SecretKeyClient/src/main/java/com/zhongshu/secretKey/client/model/secret/SecretKeySearch.java
  4. 21 0
      SecretKeyClient/src/main/java/com/zhongshu/secretKey/client/model/secret/SecretKeyUpdateParam.java
  5. 20 0
      SecretKeyClient/src/main/java/com/zhongshu/secretKey/client/service/SecretKeyVerifyService.java
  6. 20 0
      SecretKeyClient/src/main/java/com/zhongshu/secretKey/client/types/UsedState.java
  7. 25 0
      SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/controller/feign/SecretKeyVerifyController.java
  8. 98 0
      SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/controller/secret/SecretKeyController.java
  9. 20 0
      SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/dao/secret/SecretKeyDao.java
  10. 17 0
      SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/dao/secret/extend/SecretKeyDaoExtend.java
  11. 77 0
      SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/dao/secret/impl/SecretKeyDaoImpl.java
  12. 39 0
      SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/domain/secret/SecretKey.java
  13. 111 0
      SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/service/secret/SecretKeyService.java
  14. 47 0
      SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/service/secret/SecretKeyVerifyServiceImpl.java
  15. 1 0
      SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/service/test/TestInfoService.java
  16. 7 1
      SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/utils/CommonUtil.java
  17. 72 0
      SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/utils/SecurityUtil.java

+ 39 - 0
SecretKeyClient/src/main/java/com/zhongshu/secretKey/client/model/secret/SecretKeyModel.java

@@ -0,0 +1,39 @@
+package com.zhongshu.secretKey.client.model.secret;
+
+import com.zhongshu.secretKey.client.model.base.SuperModel;
+import com.zhongshu.secretKey.client.types.DataState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/12/24
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SecretKeyModel extends SuperModel {
+    @Schema(description = "ak")
+    private String ak;
+
+    @Schema(description = "sk")
+    private String sk;
+
+    @Schema(description = "如果专用,对应的数据ID")
+    private String aboutDataId;
+
+    @Schema(description = "是否可用")
+    private DataState state;
+
+    private String stateStr;
+
+    public String getStateStr() {
+        if (state != null) {
+            return state.getRemark();
+        }
+        return "";
+    }
+
+}

+ 21 - 0
SecretKeyClient/src/main/java/com/zhongshu/secretKey/client/model/secret/SecretKeyParam.java

@@ -0,0 +1,21 @@
+package com.zhongshu.secretKey.client.model.secret;
+
+import com.zhongshu.secretKey.client.model.base.SuperParam;
+import com.zhongshu.secretKey.client.types.DataState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/12/24
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SecretKeyParam extends SuperParam {
+
+    @Schema(description = "是否可用")
+    private DataState state;
+}

+ 29 - 0
SecretKeyClient/src/main/java/com/zhongshu/secretKey/client/model/secret/SecretKeySearch.java

@@ -0,0 +1,29 @@
+package com.zhongshu.secretKey.client.model.secret;
+
+import com.zhongshu.secretKey.client.model.base.SuperSearch;
+import com.zhongshu.secretKey.client.types.DataState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/12/24
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SecretKeySearch extends SuperSearch {
+    @Schema(description = "ak")
+    private String ak;
+
+    @Schema(description = "sk")
+    private String sk;
+
+    @Schema(description = "如果专用,对应的数据ID")
+    private String aboutDataId;
+
+    @Schema(description = "是否可用")
+    private DataState state;
+}

+ 21 - 0
SecretKeyClient/src/main/java/com/zhongshu/secretKey/client/model/secret/SecretKeyUpdateParam.java

@@ -0,0 +1,21 @@
+package com.zhongshu.secretKey.client.model.secret;
+
+import com.zhongshu.secretKey.client.model.base.SuperParam;
+import com.zhongshu.secretKey.client.types.DataState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/12/24
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SecretKeyUpdateParam extends SuperParam {
+
+    @Schema(description = "是否可用")
+    private DataState state;
+}

+ 20 - 0
SecretKeyClient/src/main/java/com/zhongshu/secretKey/client/service/SecretKeyVerifyService.java

@@ -0,0 +1,20 @@
+package com.zhongshu.secretKey.client.service;
+
+import com.github.microservice.net.ResultContent;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@FeignClient("secretkeyserver/manager/secretKeyVerify")
+public interface SecretKeyVerifyService {
+
+    @RequestMapping(value = "verifyAk", method = RequestMethod.GET, consumes = {MediaType.ALL_VALUE})
+    ResultContent verifyAk(
+            @RequestParam(value = "ak", required = true) String ak,
+            @RequestParam(value = "time") String time,
+            @RequestParam(value = "sign") String sign);
+
+
+}

+ 20 - 0
SecretKeyClient/src/main/java/com/zhongshu/secretKey/client/types/UsedState.java

@@ -0,0 +1,20 @@
+package com.zhongshu.secretKey.client.types;
+
+import lombok.Getter;
+
+/**
+ *
+ */
+public enum UsedState {
+    UnUsed("未使用"),
+    Used("在使用"),
+    Cancel("已作废"),
+    ;
+
+    @Getter
+    private String remark;
+
+    UsedState(String remark) {
+        this.remark = remark;
+    }
+}

+ 25 - 0
SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/controller/feign/SecretKeyVerifyController.java

@@ -0,0 +1,25 @@
+package com.zhongshu.secretKey.server.core.controller.feign;
+
+import com.zhongshu.secretKey.client.service.SecretKeyVerifyService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.experimental.Delegate;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 管理
+ *
+ * @author TRX
+ * @date 2024/6/5
+ */
+@RestController
+@RequestMapping("manager/secretKeyVerify")
+@Tag(name = "秘钥验证-验证管理")
+public class SecretKeyVerifyController implements SecretKeyVerifyService {
+
+    @Autowired
+    @Delegate
+    private SecretKeyVerifyService secretKeyVerifyService;
+
+}

+ 98 - 0
SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/controller/secret/SecretKeyController.java

@@ -0,0 +1,98 @@
+package com.zhongshu.secretKey.server.core.controller.secret;
+
+import com.github.microservice.auth.security.annotations.ResourceAuth;
+import com.github.microservice.auth.security.type.AuthType;
+import com.github.microservice.net.ResultContent;
+import com.zhongshu.card.client.model.base.IDParam;
+import com.zhongshu.secretKey.client.model.secret.SecretKeyModel;
+import com.zhongshu.secretKey.client.model.secret.SecretKeyParam;
+import com.zhongshu.secretKey.client.model.secret.SecretKeySearch;
+import com.zhongshu.secretKey.client.model.secret.SecretKeyUpdateParam;
+import com.zhongshu.secretKey.client.types.DataState;
+import com.zhongshu.secretKey.server.core.service.secret.SecretKeyService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.util.Assert;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 管理
+ *
+ * @author TRX
+ * @date 2024/6/5
+ */
+@RestController
+@RequestMapping("/secretKey")
+@Tag(name = "秘钥管理-管理")
+public class SecretKeyController {
+
+    @Autowired
+    private SecretKeyService secretKeyService;
+
+//    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "生成一个ak、sk", description = "生成一个ak、sk")
+    @RequestMapping(value = "createSecret", method = {RequestMethod.POST})
+    public ResultContent createSecret(@RequestBody SecretKeyParam param) {
+        return this.secretKeyService.createSecret(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "编辑数据", description = "编辑数据")
+    @RequestMapping(value = "updateInfo", method = {RequestMethod.POST})
+    public ResultContent updateInfo(@RequestBody SecretKeyUpdateParam param) {
+        return this.secretKeyService.updateInfo(param);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "数据详情", description = "数据详情")
+    @RequestMapping(value = "getDetailInfo", method = {RequestMethod.POST})
+    public ResultContent<SecretKeyModel> getDetailInfo(@RequestBody IDParam param) {
+        return this.secretKeyService.getDetailInfo(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "删除数据", description = "删除数据")
+    @RequestMapping(value = "deleteInfo", method = {RequestMethod.POST})
+    public ResultContent deleteInfo(@RequestBody IDParam param) {
+        return this.secretKeyService.deleteInfo(param.getId());
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "数据列表-分页查询", description = "数据列表-分页查询")
+    @RequestMapping(value = {"page"}, method = {RequestMethod.POST})
+    public ResultContent<Page<SecretKeyModel>> page(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable, @Parameter(required = false) SecretKeySearch param) {
+        return secretKeyService.page(param, pageable);
+    }
+
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "数据列表-分页查询(供选择)", description = "数据列表-分页查询")
+    @RequestMapping(value = {"pageForSelect"}, method = {RequestMethod.POST})
+    public ResultContent<Page<SecretKeyModel>> pageForSelect(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable, @Parameter(required = false) SecretKeySearch param) {
+        Assert.hasText(param.getProjectOid(), "projectOid不能为空");
+        return secretKeyService.page(param, pageable);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "启用数据", description = "启用数据")
+    @RequestMapping(value = "enableData", method = {RequestMethod.POST})
+    public ResultContent enableData(@RequestBody IDParam param) {
+        return this.secretKeyService.changeState(param.getId(), DataState.Enable);
+    }
+
+    @ResourceAuth(value = "user", type = AuthType.User)
+    @Operation(summary = "禁用数据", description = "禁用数据")
+    @RequestMapping(value = "disableData", method = {RequestMethod.POST})
+    public ResultContent disableData(@RequestBody IDParam param) {
+        return this.secretKeyService.changeState(param.getId(), DataState.Disable);
+    }
+
+}

+ 20 - 0
SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/dao/secret/SecretKeyDao.java

@@ -0,0 +1,20 @@
+package com.zhongshu.secretKey.server.core.dao.secret;
+
+import com.github.microservice.components.data.mongo.mongo.dao.MongoDao;
+import com.zhongshu.secretKey.server.core.dao.secret.extend.SecretKeyDaoExtend;
+import com.zhongshu.secretKey.server.core.domain.secret.SecretKey;
+
+import java.util.List;
+
+/**
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface SecretKeyDao extends MongoDao<SecretKey>, SecretKeyDaoExtend {
+
+    List<SecretKey> findByIdIn(List<String> ids);
+
+    SecretKey findTopById(String id);
+
+    SecretKey findTopByAk(String ak);
+}

+ 17 - 0
SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/dao/secret/extend/SecretKeyDaoExtend.java

@@ -0,0 +1,17 @@
+package com.zhongshu.secretKey.server.core.dao.secret.extend;
+
+import com.zhongshu.secretKey.client.model.secret.SecretKeySearch;
+import com.zhongshu.secretKey.server.core.domain.secret.SecretKey;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/7/7
+ * @Version: 1.0
+ */
+public interface SecretKeyDaoExtend {
+
+    Page<SecretKey> page(Pageable pageable, SecretKeySearch param);
+
+}

+ 77 - 0
SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/dao/secret/impl/SecretKeyDaoImpl.java

@@ -0,0 +1,77 @@
+package com.zhongshu.secretKey.server.core.dao.secret.impl;
+
+import com.github.microservice.components.data.mongo.mongo.helper.DBHelper;
+import com.zhongshu.secretKey.client.model.secret.SecretKeySearch;
+import com.zhongshu.secretKey.server.core.dao.BaseImpl;
+import com.zhongshu.secretKey.server.core.dao.secret.extend.SecretKeyDaoExtend;
+import com.zhongshu.secretKey.server.core.domain.secret.SecretKey;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/4/12
+ * @Version: 1.0
+ */
+public class SecretKeyDaoImpl extends BaseImpl implements SecretKeyDaoExtend {
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    @Autowired
+    private DBHelper dbHelper;
+
+    @Override
+    public Page<SecretKey> page(Pageable pageable, SecretKeySearch param) {
+        Criteria criteria = buildFilterCriteria(param);
+
+        Sort sort = buildSort(param);
+        Query query = Query.query(criteria);
+        query.with(sort);
+        return dbHelper.pages(query, pageable, SecretKey.class);
+    }
+
+    private Criteria buildFilterCriteria(SecretKeySearch param) {
+        Criteria criteria = buildCriteriaNotOid(param);
+
+        if (StringUtils.isNotEmpty(param.getProjectOid())) {
+            criteria.and("projectOid").is(param.getProjectOid());
+        }
+
+        if (StringUtils.isNotEmpty(param.getAboutDataId())) {
+            criteria.and("aboutDataId").is(param.getAboutDataId());
+        }
+
+        if (param.getState() != null) {
+            criteria.and("state").is(param.getState());
+        }
+
+        // 模糊搜索
+        List<Criteria> criterias = new ArrayList<>();
+        // 用户名称
+        if (StringUtils.isNotEmpty(param.getAk())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getAk() + ".*$");
+            criterias.add(Criteria.where("ak").is(pattern));
+        }
+        if (StringUtils.isNotEmpty(param.getSk())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getSk() + ".*$");
+            criterias.add(Criteria.where("sk").is(pattern));
+        }
+        if (!CollectionUtils.isEmpty(criterias)) {
+            criteria.andOperator(criterias.toArray(new Criteria[]{}));
+        }
+        return criteria;
+    }
+
+}

+ 39 - 0
SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/domain/secret/SecretKey.java

@@ -0,0 +1,39 @@
+package com.zhongshu.secretKey.server.core.domain.secret;
+
+import com.zhongshu.secretKey.client.types.DataState;
+import com.zhongshu.secretKey.client.types.UsedState;
+import com.zhongshu.secretKey.server.core.domain.base.SuperMain;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.checkerframework.common.aliasing.qual.NonLeaked;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * @author TRX
+ * @date 2024/12/24
+ */
+@Data
+@Document
+@AllArgsConstructor
+@NoArgsConstructor
+@NonLeaked
+public class SecretKey extends SuperMain {
+
+    @Schema(description = "ak")
+    private String ak;
+
+    @Schema(description = "sk")
+    private String sk;
+
+    @Schema(description = "如果专用,对应的数据ID")
+    private String aboutDataId;
+
+    @Schema(description = "是否可用")
+    private DataState state = DataState.Enable;
+
+    @Schema(description = "使用状态")
+    private UsedState usedState = UsedState.UnUsed;
+
+}

+ 111 - 0
SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/service/secret/SecretKeyService.java

@@ -0,0 +1,111 @@
+package com.zhongshu.secretKey.server.core.service.secret;
+
+import com.github.microservice.components.data.base.util.PageEntityUtil;
+import com.github.microservice.net.ResultContent;
+import com.github.microservice.net.ResultMessage;
+import com.zhongshu.card.client.model.org.projectDict.ProjectDictModel;
+import com.zhongshu.secretKey.client.model.secret.SecretKeyModel;
+import com.zhongshu.secretKey.client.model.secret.SecretKeyParam;
+import com.zhongshu.secretKey.client.model.secret.SecretKeySearch;
+import com.zhongshu.secretKey.client.model.secret.SecretKeyUpdateParam;
+import com.zhongshu.secretKey.client.types.DataState;
+import com.zhongshu.secretKey.client.types.UsedState;
+import com.zhongshu.secretKey.server.core.dao.secret.SecretKeyDao;
+import com.zhongshu.secretKey.server.core.domain.secret.SecretKey;
+import com.zhongshu.secretKey.server.core.service.base.SuperService;
+import com.zhongshu.secretKey.server.core.utils.CommonUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+/**
+ * 测试管理
+ *
+ * @author TRX
+ * @date 2024/12/19
+ */
+@Slf4j
+@Service
+public class SecretKeyService extends SuperService {
+
+    @Autowired
+    private SecretKeyDao secretKeyDao;
+
+    public ResultContent createSecret(SecretKeyParam param) {
+        SecretKey entity = new SecretKey();
+        BeanUtils.copyProperties(param, entity);
+        entity.setId(null);
+        entity.setUsedState(UsedState.UnUsed);
+        entity.setState(DataState.Enable);
+        entity.setAk(CommonUtil.generateRandomString(16));
+        entity.setSk(CommonUtil.generateRandomString(32));
+        secretKeyDao.save(entity);
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 编辑数据
+     *
+     * @param param
+     * @return
+     */
+    public ResultContent updateInfo(SecretKeyUpdateParam param) {
+        SecretKey entity = null;
+        if (StringUtils.isNotEmpty(param.getId())) {
+            entity = secretKeyDao.findTopById(param.getId());
+            if (ObjectUtils.isEmpty(entity)) {
+                return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, param.getId()));
+            }
+            initUpdateEntity(entity);
+        }
+        BeanUtils.copyProperties(param, entity);
+        secretKeyDao.save(entity);
+        return ResultContent.buildSuccess();
+    }
+
+    public ResultContent<Page<SecretKeyModel>> page(SecretKeySearch param, Pageable pageable) {
+        Page<SecretKey> page = secretKeyDao.page(pageable, param);
+        return ResultContent.buildSuccess(PageEntityUtil.concurrent2PageModel(page, this::toModel));
+    }
+
+    public ResultContent deleteInfo(String id) {
+        SecretKey entity = secretKeyDao.findTopById(id);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        secretKeyDao.delete(entity);
+        return ResultContent.buildSuccess();
+    }
+
+    public ResultContent<SecretKeyModel> getDetailInfo(String id) {
+        SecretKey entity = secretKeyDao.findTopById(id);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        return ResultContent.buildSuccess(toModel(entity));
+    }
+
+    public ResultContent changeState(String id, DataState state) {
+        SecretKey entity = secretKeyDao.findTopById(id);
+        if (ObjectUtils.isEmpty(entity)) {
+            return ResultContent.buildFail(String.format(ResultMessage.DATA_NOT_EXIST, id));
+        }
+        entity.setState(state);
+        secretKeyDao.save(entity);
+        return ResultContent.buildSuccess();
+    }
+
+    private ProjectDictModel toModel(SecretKey entity) {
+        ProjectDictModel model = new ProjectDictModel();
+        if (ObjectUtils.isNotEmpty(entity)) {
+            BeanUtils.copyProperties(entity, model);
+        }
+        return model;
+    }
+
+}

+ 47 - 0
SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/service/secret/SecretKeyVerifyServiceImpl.java

@@ -0,0 +1,47 @@
+package com.zhongshu.secretKey.server.core.service.secret;
+
+import com.github.microservice.net.ResultContent;
+import com.zhongshu.secretKey.client.service.SecretKeyVerifyService;
+import com.zhongshu.secretKey.client.types.DataState;
+import com.zhongshu.secretKey.server.core.dao.secret.SecretKeyDao;
+import com.zhongshu.secretKey.server.core.domain.secret.SecretKey;
+import com.zhongshu.secretKey.server.core.utils.SecurityUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author TRX
+ * @date 2024/12/24
+ */
+@Slf4j
+@Service
+public class SecretKeyVerifyServiceImpl implements SecretKeyVerifyService {
+
+    @Autowired
+    private SecretKeyDao secretKeyDao;
+
+    @Override
+    public ResultContent verifyAk(String ak, String time, String sign) {
+        if (StringUtils.isNotEmpty(ak)) {
+            SecretKey akSkConfig = secretKeyDao.findTopByAk(ak);
+            if (ObjectUtils.isEmpty(akSkConfig)) {
+                return ResultContent.buildFail("ak不存在");
+            }
+            if (akSkConfig.getState() != DataState.Enable) {
+                return ResultContent.buildFail("秘钥不可用");
+            }
+            String sk = akSkConfig.getSk();
+            if (StringUtils.isNotEmpty(sk)) {
+                String input = String.format("%s%s%s", ak, time, sk);
+                String _sign = SecurityUtil.getMD5Str(input).toLowerCase();
+                if (!_sign.equals(sign)) {
+                    return ResultContent.buildFail("签名验证错误");
+                }
+            }
+        }
+        return ResultContent.buildSuccess();
+    }
+}

+ 1 - 0
SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/service/test/TestInfoService.java

@@ -14,6 +14,7 @@ import com.zhongshu.secretKey.server.core.domain.test.TestInfo;
 import com.zhongshu.secretKey.server.core.service.base.SuperService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;

+ 7 - 1
SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/utils/CommonUtil.java

@@ -8,9 +8,9 @@ import com.google.zxing.client.j2se.MatrixToImageWriter;
 import com.google.zxing.common.BitMatrix;
 import com.google.zxing.qrcode.QRCodeWriter;
 import com.zhongshu.card.client.model.operLogs.OperationLogsAddParam;
+import com.zhongshu.card.client.type.Sex;
 import com.zhongshu.card.client.utils.DateUtils;
 import com.zhongshu.card.client.utils.ITree;
-import com.zhongshu.card.client.type.Sex;
 import jakarta.servlet.http.HttpServletRequest;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
@@ -20,6 +20,7 @@ import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
 import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
 import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
 import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.bson.types.Decimal128;
 import org.springframework.data.domain.Page;
@@ -472,4 +473,9 @@ public class CommonUtil {
         }
         return param;
     }
+
+    public static String generateRandomString(int count) {
+        return RandomStringUtils.randomAlphabetic(count).toLowerCase();
+    }
+
 }

+ 72 - 0
SecretKeyServer/src/main/java/com/zhongshu/secretKey/server/core/utils/SecurityUtil.java

@@ -0,0 +1,72 @@
+package com.zhongshu.secretKey.server.core.utils;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.math.BigInteger;
+import java.security.MessageDigest;
+import java.util.Base64;
+
+/**
+ * @author TRX
+ * @date 2024/3/21
+ */
+public class SecurityUtil {
+
+    public static String getMD5Str(String s) {
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            byte[] bytes = md.digest(s.getBytes("utf-8"));
+            return toHex(bytes);
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public static String toHex(byte[] bytes) {
+        final char[] HEX_DIGITS = "0123456789ABCDEF".toCharArray();
+        StringBuilder ret = new StringBuilder(bytes.length * 2);
+        for (int i = 0; i < bytes.length; i++) {
+            ret.append(HEX_DIGITS[(bytes[i] >> 4) & 0x0f]);
+            ret.append(HEX_DIGITS[bytes[i] & 0x0f]);
+        }
+        return ret.toString();
+    }
+
+    public static String passWord(String password) {
+        password = password + "--";
+        String encryptedPassword = "";
+        try {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            byte[] digest = md.digest(password.getBytes());
+            BigInteger no = new BigInteger(1, digest);
+            encryptedPassword = no.toString(16);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return encryptedPassword;
+    }
+
+    public static String base64Encode(String str) {
+        if (StringUtils.isNotEmpty(str)) {
+            try {
+                byte[] encoded = Base64.getEncoder().encode(str.getBytes("utf-8"));
+                return new String(encoded);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return str;
+    }
+
+    public static String base64Decode(String str) {
+        if (StringUtils.isNotEmpty(str)) {
+            try {
+                byte[] decoded = Base64.getDecoder().decode(str.getBytes("utf-8"));
+                return new String(decoded);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return str;
+    }
+}