From 03c7e2237c82c12bd5d23440dc7602a1993d5405 Mon Sep 17 00:00:00 2001 From: Yuxuecheng Date: Sat, 8 Feb 2025 14:53:50 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=87=E6=9C=9F=E9=AA=8C=E8=AF=81=E6=8F=90?= =?UTF-8?q?=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/framework/AES/AESExample.java | 36 ++++++ .../com/ruoyi/framework/task/OverdueTask.java | 65 ++++++++++ ruoyi-ui/src/views/overdue/index.vue | 116 ++++++++++++++++++ 3 files changed, 217 insertions(+) create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/AES/AESExample.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/task/OverdueTask.java create mode 100644 ruoyi-ui/src/views/overdue/index.vue diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/AES/AESExample.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/AES/AESExample.java new file mode 100644 index 0000000..1b0912b --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/AES/AESExample.java @@ -0,0 +1,36 @@ +package com.ruoyi.framework.AES; + +import com.ruoyi.framework.constants.Constants; +import org.springframework.stereotype.Component; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.util.Base64; + +@Component +public class AESExample { + // 加密方法 + public static String encrypt(String data) throws Exception { + SecretKeySpec keySpec = generateKey(); + Cipher cipher = Cipher.getInstance(Constants.ALGORITHM); + cipher.init(Cipher.ENCRYPT_MODE, keySpec); + byte[] encryptedBytes = cipher.doFinal(data.getBytes()); + return Base64.getEncoder().encodeToString(encryptedBytes); + } + + // 解密方法 + public String decrypt(String encryptedData) throws Exception { + byte[] decryptedBytes = null; + SecretKeySpec keySpec = generateKey(); + Cipher cipher = Cipher.getInstance(Constants.ALGORITHM); + cipher.init(Cipher.DECRYPT_MODE, keySpec); + decryptedBytes = cipher.doFinal(Base64.getDecoder().decode(encryptedData)); + return new String(decryptedBytes); + } + + // 生成密钥 + private static SecretKeySpec generateKey() throws Exception { + byte[] keyBytes = Constants.SECRET_KEY.getBytes(); + return new SecretKeySpec(keyBytes, Constants.ALGORITHM); + } +} \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/task/OverdueTask.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/task/OverdueTask.java new file mode 100644 index 0000000..fbbb133 --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/task/OverdueTask.java @@ -0,0 +1,65 @@ +package com.ruoyi.framework.task; + +import cn.hutool.core.date.DateTime; +import com.ruoyi.framework.AES.AESExample; +import com.ruoyi.framework.constants.Constants; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Component +public class OverdueTask { + + private static final Logger log = LoggerFactory.getLogger(OverdueTask.class); + @Resource + private RedisTemplate redisTemplate; + @Resource + private AESExample aesExample; + + // 每半小时执行一次 + @Scheduled(cron = "0 0/30 * * * ?") + public void updateOverdueFromFile() { + String filePath = Constants.KEY_FILE_PATH; + File file = new File(filePath); + + // 判断文件是否存在 + if (!file.exists()) { + try { + file.createNewFile(); + } catch (IOException e) { + System.err.println("创建文件失败"); + e.printStackTrace(); + } + } + + StringBuilder content = new StringBuilder(); + try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { + String line; + while ((line = reader.readLine()) != null) { + content.append(line); + } + } catch (IOException e) { + e.printStackTrace(); + } + String decrypt = null; + try { + decrypt = aesExample.decrypt(content.toString()); + } catch (Exception e) { + System.err.println("验证程序错误,请检查"); + } + redisTemplate.opsForValue().set("overdue", decrypt); + log.info("更新过期时间成功 {} {}", decrypt, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); + } +} \ No newline at end of file diff --git a/ruoyi-ui/src/views/overdue/index.vue b/ruoyi-ui/src/views/overdue/index.vue new file mode 100644 index 0000000..bb0de5d --- /dev/null +++ b/ruoyi-ui/src/views/overdue/index.vue @@ -0,0 +1,116 @@ + + + + + + +