diff --git a/src/main/java/com/g9/g9backend/config/MybatisPlusConfig.java b/src/main/java/com/g9/g9backend/config/MybatisPlusConfig.java
index 31cc606..fae9926 100644
--- a/src/main/java/com/g9/g9backend/config/MybatisPlusConfig.java
+++ b/src/main/java/com/g9/g9backend/config/MybatisPlusConfig.java
@@ -1,23 +1,68 @@
 package com.g9.g9backend.config;
 
 import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.core.toolkit.AES;
 import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
 import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment; // 正确导入 Spring 的 Environment
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 @Configuration
 @EnableTransactionManagement
-@MapperScan( { "com.g9.g9backend.mapper" })
+@MapperScan({"com.g9.g9backend.mapper"})
 public class MybatisPlusConfig {
 
+    private final Environment environment;
+
+    public MybatisPlusConfig(Environment environment) {
+        this.environment = environment;
+    }
+
     @Bean
     public MybatisPlusInterceptor mybatisPlusInterceptor() {
-        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
-        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
-        return mybatisPlusInterceptor;
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+        return interceptor;
     }
 
-}
+    // 生成 AES 密钥 (只需运行一次，生成后妥善保存)
+    public static void main(String[] args) {
+        String randomKey = AES.generateRandomKey();
+        System.out.println("生成的 AES 密钥: " + randomKey);
+        String encryptedPassword = AES.encrypt("", randomKey); // 对实际的数据库密码进行加密
+        System.out.println("加密后的密码: " + encryptedPassword);
+    }
+
+    // 注册自定义密码解码器
+    @Bean
+    public PasswordDecoder passwordDecoder() {
+        return new CustomPasswordDecoder(environment.getProperty("mybatis-plus.aes-key"));
+    }
+
+    // 自定义密码解码器接口
+    public interface PasswordDecoder {
+        String decode(String encodedPassword);
+    }
+
+    // 自定义密码解码器实现
+    public static class CustomPasswordDecoder implements PasswordDecoder {
+
+        private final String aesKey;
+
+        public CustomPasswordDecoder(String aesKey) {
+            this.aesKey = aesKey;
+        }
+
+        @Override
+        public String decode(String encodedPassword) {
+            try {
+                return AES.decrypt(encodedPassword, aesKey);
+            } catch (Exception e) {
+                throw new RuntimeException("密码解密失败", e);
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/g9/g9backend/controller/FileController.java b/src/main/java/com/g9/g9backend/controller/FileController.java
index 313f61e..947c4af 100644
--- a/src/main/java/com/g9/g9backend/controller/FileController.java
+++ b/src/main/java/com/g9/g9backend/controller/FileController.java
@@ -38,7 +38,7 @@
     @PostMapping
     public ResponseEntity<String> uploadFile(@RequestBody MultipartFile file) {
         // 相对路径（可在资源根路径创建 upload 文件夹）
-        String UPLOAD_DIR = "D:/nginx/nginx-1.26.2/MCPT";
+        String UPLOAD_DIR = "/app/upload";
 
         // 获取原始文件名
         String originalFilename = file.getOriginalFilename();
diff --git a/src/main/java/com/g9/g9backend/controller/ResourceController.java b/src/main/java/com/g9/g9backend/controller/ResourceController.java
index abde7ef..61f56fe 100644
--- a/src/main/java/com/g9/g9backend/controller/ResourceController.java
+++ b/src/main/java/com/g9/g9backend/controller/ResourceController.java
@@ -121,7 +121,7 @@
         community.setType(postResourceDTO.getResource().getClassify());
         community.setResourceId(postResourceDTO.getResource().getResourceId());
         communityService.save(community);
-        return ResponseEntity.ok("");
+        return ResponseEntity.ok(String.valueOf(resource.getResourceId()));
     }
 
     /**
@@ -133,7 +133,7 @@
     @PostMapping("/version")
     public ResponseEntity<String> uploadResourceVersion(@RequestBody ResourceVersion resourceVersion) {
         resourceVersionService.save(resourceVersion);
-        return ResponseEntity.ok("");
+        return ResponseEntity.ok(String.valueOf(resourceVersion.getResourceVersionId()));
     }
 
     /**
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 07ec02f..de13118 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -2,9 +2,9 @@
   application:
     name: G9backend
   datasource:
-    url: jdbc:mysql://localhost:3306/mcpt
-    username: root
-    password:
+    url: jdbc:mysql://202.205.102.121:3306/team9
+    username: team9
+    password: "Team99999#"
   jpa:
     hibernate:
       ddl-auto: none
