From e7868348433a03f7aa61c84462697d93226b5df3 Mon Sep 17 00:00:00 2001
From: hongjli <3117313295@qq.com>
Date: 星期二, 27 五月 2025 09:40:22 +0800
Subject: [PATCH] 增加密钥接口
---
src/main/java/com/weiwojc/service/SecretKeyService.java | 21 +++++
src/main/java/com/weiwojc/controller/SecretKeyController.java | 37 +++++++++
src/main/java/com/weiwojc/model/dto/SecretKeyUpdateDTO.java | 16 ++++
src/main/java/com/weiwojc/model/entity/SecretKey.java | 21 +++++
src/main/java/com/weiwojc/service/impl/SecretKeyServiceImpl.java | 85 +++++++++++++++++++++
src/main/java/com/weiwojc/mapper/SecretKeyMapper.java | 11 ++
src/main/java/com/weiwojc/config/MybatisPlusMetaObjectHandler.java | 22 +++++
7 files changed, 213 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/weiwojc/config/MybatisPlusMetaObjectHandler.java b/src/main/java/com/weiwojc/config/MybatisPlusMetaObjectHandler.java
new file mode 100644
index 0000000..d6e3e11
--- /dev/null
+++ b/src/main/java/com/weiwojc/config/MybatisPlusMetaObjectHandler.java
@@ -0,0 +1,22 @@
+package com.weiwojc.config;
+
+import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
+import org.apache.ibatis.reflection.MetaObject;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+
+@Component
+public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {
+
+ @Override
+ public void insertFill(MetaObject metaObject) {
+ this.strictInsertFill(metaObject, "createdAt", LocalDateTime.class, LocalDateTime.now());
+ this.strictInsertFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now());
+ }
+
+ @Override
+ public void updateFill(MetaObject metaObject) {
+ this.strictUpdateFill(metaObject, "updatedAt", LocalDateTime.class, LocalDateTime.now());
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/weiwojc/controller/SecretKeyController.java b/src/main/java/com/weiwojc/controller/SecretKeyController.java
new file mode 100644
index 0000000..97320bc
--- /dev/null
+++ b/src/main/java/com/weiwojc/controller/SecretKeyController.java
@@ -0,0 +1,37 @@
+package com.weiwojc.controller;
+
+import com.weiwojc.model.common.Result;
+import com.weiwojc.model.entity.SecretKey;
+import com.weiwojc.service.SecretKeyService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/api/secret-key")
+@RequiredArgsConstructor
+public class SecretKeyController {
+
+ private final SecretKeyService secretKeyService;
+
+ /**
+ * 鑾峰彇褰撳墠瀵嗛挜
+ */
+ @GetMapping
+ public Result<SecretKey> getCurrentSecretKey() {
+ SecretKey secretKey = secretKeyService.getCurrentSecretKey();
+ return Result.success(secretKey);
+ }
+
+ /**
+ * 鏇存柊瀵嗛挜
+ */
+ @GetMapping("/update/{key}")
+ public Result<SecretKey> updateSecretKey(@PathVariable String key) {
+ try {
+ SecretKey secretKey = secretKeyService.updateSecretKey(key);
+ return Result.success("瀵嗛挜鏇存柊鎴愬姛", secretKey);
+ } catch (RuntimeException e) {
+ return Result.badRequest(e.getMessage());
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/weiwojc/mapper/SecretKeyMapper.java b/src/main/java/com/weiwojc/mapper/SecretKeyMapper.java
new file mode 100644
index 0000000..89d50e2
--- /dev/null
+++ b/src/main/java/com/weiwojc/mapper/SecretKeyMapper.java
@@ -0,0 +1,11 @@
+package com.weiwojc.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.weiwojc.model.entity.SecretKey;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SecretKeyMapper extends BaseMapper<SecretKey> {
+ // 缁ф壙 BaseMapper 宸茬粡鎻愪緵浜嗗熀纭�鐨� CRUD 鎿嶄綔
+ // 瀵逛簬鍗曟潯璁板綍鐨勫満鏅紝杩欎簺鍩虹鎿嶄綔宸茬粡瓒冲
+}
\ No newline at end of file
diff --git a/src/main/java/com/weiwojc/model/dto/SecretKeyUpdateDTO.java b/src/main/java/com/weiwojc/model/dto/SecretKeyUpdateDTO.java
new file mode 100644
index 0000000..e37009f
--- /dev/null
+++ b/src/main/java/com/weiwojc/model/dto/SecretKeyUpdateDTO.java
@@ -0,0 +1,16 @@
+package com.weiwojc.model.dto;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
+import lombok.Data;
+
+@Data
+public class SecretKeyUpdateDTO {
+ @NotBlank(message = "鍘熷瘑閽ヤ笉鑳戒负绌�")
+ @Size(max = 255, message = "鍘熷瘑閽ラ暱搴︿笉鑳借秴杩�255涓瓧绗�")
+ private String oldKey;
+
+ @NotBlank(message = "鏂板瘑閽ヤ笉鑳戒负绌�")
+ @Size(max = 255, message = "鏂板瘑閽ラ暱搴︿笉鑳借秴杩�255涓瓧绗�")
+ private String newKey;
+}
\ No newline at end of file
diff --git a/src/main/java/com/weiwojc/model/entity/SecretKey.java b/src/main/java/com/weiwojc/model/entity/SecretKey.java
new file mode 100644
index 0000000..6c93e3e
--- /dev/null
+++ b/src/main/java/com/weiwojc/model/entity/SecretKey.java
@@ -0,0 +1,21 @@
+package com.weiwojc.model.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("secret_key")
+public class SecretKey {
+ @TableId(value = "`key`", type = IdType.INPUT)
+ private String key;
+
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createdAt;
+
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updatedAt;
+
+ @TableLogic
+ private Boolean isDeleted;
+}
\ No newline at end of file
diff --git a/src/main/java/com/weiwojc/service/SecretKeyService.java b/src/main/java/com/weiwojc/service/SecretKeyService.java
new file mode 100644
index 0000000..a94344a
--- /dev/null
+++ b/src/main/java/com/weiwojc/service/SecretKeyService.java
@@ -0,0 +1,21 @@
+package com.weiwojc.service;
+
+import com.weiwojc.model.entity.SecretKey;
+
+public interface SecretKeyService {
+
+ /**
+ * 鑾峰彇褰撳墠瀵嗛挜锛堣〃涓敮涓�鐨勪竴鏉¤褰曪級
+ */
+ SecretKey getCurrentSecretKey();
+
+ /**
+ * 鏇存柊瀵嗛挜
+ */
+ SecretKey updateSecretKey(String newKey);
+
+ /**
+ * 鍒濆鍖栧瘑閽ワ紙濡傛灉涓嶅瓨鍦ㄥ垯鍒涘缓榛樿瀵嗛挜锛�
+ */
+ SecretKey initializeSecretKey();
+}
\ No newline at end of file
diff --git a/src/main/java/com/weiwojc/service/impl/SecretKeyServiceImpl.java b/src/main/java/com/weiwojc/service/impl/SecretKeyServiceImpl.java
new file mode 100644
index 0000000..ca3a492
--- /dev/null
+++ b/src/main/java/com/weiwojc/service/impl/SecretKeyServiceImpl.java
@@ -0,0 +1,85 @@
+package com.weiwojc.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.weiwojc.mapper.SecretKeyMapper;
+import com.weiwojc.model.entity.SecretKey;
+import com.weiwojc.service.SecretKeyService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.UUID;
+
+@Service
+@RequiredArgsConstructor
+public class SecretKeyServiceImpl implements SecretKeyService {
+
+ private final SecretKeyMapper secretKeyMapper;
+
+ @Override
+ public SecretKey getCurrentSecretKey() {
+ LambdaQueryWrapper<SecretKey> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(SecretKey::getIsDeleted, false)
+ .last("LIMIT 1");
+
+ SecretKey secretKey = secretKeyMapper.selectOne(queryWrapper);
+
+ // 濡傛灉娌℃湁鎵惧埌瀵嗛挜锛岃嚜鍔ㄥ垵濮嬪寲涓�涓�
+ if (secretKey == null) {
+ return initializeSecretKey();
+ }
+
+ return secretKey;
+ }
+
+ @Override
+ @Transactional
+ public SecretKey updateSecretKey(String newKey) {
+ if (newKey == null || newKey.trim().isEmpty()) {
+ throw new RuntimeException("鏂板瘑閽ヤ笉鑳戒负绌�");
+ }
+
+ SecretKey currentKey = getCurrentSecretKey();
+
+ // 濡傛灉鏂板瘑閽ヤ笌褰撳墠瀵嗛挜鐩稿悓锛岀洿鎺ヨ繑鍥�
+ if (currentKey.getKey().equals(newKey.trim())) {
+ return currentKey;
+ }
+
+ // 鍏堝垹闄ゅ綋鍓嶅瘑閽ワ紙閫昏緫鍒犻櫎锛�
+ currentKey.setIsDeleted(true);
+ secretKeyMapper.updateById(currentKey);
+
+ // 鍒涘缓鏂板瘑閽�
+ SecretKey newSecretKey = new SecretKey();
+ newSecretKey.setKey(newKey.trim());
+ newSecretKey.setIsDeleted(false);
+
+ secretKeyMapper.insert(newSecretKey);
+ return newSecretKey;
+ }
+
+ @Override
+ @Transactional
+ public SecretKey initializeSecretKey() {
+ // 妫�鏌ユ槸鍚﹀凡瀛樺湪瀵嗛挜
+ LambdaQueryWrapper<SecretKey> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(SecretKey::getIsDeleted, false);
+
+ List<SecretKey> existingKeys = secretKeyMapper.selectList(queryWrapper);
+ if (!existingKeys.isEmpty()) {
+ return existingKeys.get(0);
+ }
+
+ // 鐢熸垚榛樿瀵嗛挜
+ String defaultKey = "default-secret-key-" + UUID.randomUUID().toString().substring(0, 8);
+
+ SecretKey secretKey = new SecretKey();
+ secretKey.setKey(defaultKey);
+ secretKey.setIsDeleted(false);
+
+ secretKeyMapper.insert(secretKey);
+ return secretKey;
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.3