diff --git a/pom.xml b/pom.xml
index e677d09..682bcc1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -46,6 +46,10 @@
             <version>3.5.8</version>
         </dependency>
         <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-security</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <optional>true</optional>
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
