diff --git a/src/main/java/com/g9/g9backend/controller/UserController.java b/src/main/java/com/g9/g9backend/controller/UserController.java
index 38b4586..9315e8e 100644
--- a/src/main/java/com/g9/g9backend/controller/UserController.java
+++ b/src/main/java/com/g9/g9backend/controller/UserController.java
@@ -488,4 +488,58 @@
         GetUserDTO getUserDTO = new GetUserDTO(subscriberList);
         return ResponseEntity.ok(getUserDTO);
     }
+
+    /**
+     * 修改用户签名
+     *
+     * @param user 用户信息
+     * @return 用户签名修改结果
+     */
+    @PutMapping("/signature")
+    public ResponseEntity<String> modifySignature(@RequestBody User user) {
+        UpdateWrapper<User> userUpdate = new UpdateWrapper<>();
+        userUpdate.eq("user_id", user.getUserId()).set("signature", user.getSignature());
+        userService.update(userUpdate);
+
+        return ResponseEntity.ok("");
+    }
+
+    /**
+     * 修改用户密码
+     *
+     * @param modifyPasswordDTO 用户信息
+     * @return 用户密码修改结果
+     */
+    @PutMapping("/password")
+    public ResponseEntity<String> modifyPassword(@RequestBody ModifyPasswordDTO modifyPasswordDTO) {
+        // 检查密码是否正确
+        QueryWrapper<User> userQuery = new QueryWrapper<>();
+        userQuery.eq("user_id", modifyPasswordDTO.getUserId());
+        User user = userService.getOne(userQuery);
+        if (user.getPassword().equals(modifyPasswordDTO.getPassword())) {
+            UpdateWrapper<User> userUpdate = new UpdateWrapper<>();
+            userUpdate.eq("user_id", modifyPasswordDTO.getUserId()).set("password", modifyPasswordDTO.getNewPassword());
+            userService.update(userUpdate);
+            return ResponseEntity.ok("");
+        } else {
+            // 密码错误
+            logger.warn("Modify failed. Incorrect password for userID: {}", modifyPasswordDTO.getUserId());
+            return ResponseEntity.status(408).body("");
+        }
+    }
+
+    /**
+     * 修改用户头像
+     *
+     * @param user 用户信息
+     * @return 用户头像修改结果
+     */
+    @PutMapping("/avatar")
+    public ResponseEntity<String> modifyAvatar(@RequestBody User user) {
+        UpdateWrapper<User> userUpdate = new UpdateWrapper<>();
+        userUpdate.eq("user_id", user.getUserId()).set("avatar", user.getAvatar());
+        userService.update(userUpdate);
+
+        return ResponseEntity.ok("");
+    }
 }
\ No newline at end of file
diff --git a/src/test/java/com/g9/g9backend/controller/UserControllerTest.java b/src/test/java/com/g9/g9backend/controller/UserControllerTest.java
index bec8b11..d390dea 100644
--- a/src/test/java/com/g9/g9backend/controller/UserControllerTest.java
+++ b/src/test/java/com/g9/g9backend/controller/UserControllerTest.java
@@ -405,4 +405,63 @@
                         .param("userId", "1"))
                 .andExpect(status().isOk());
     }
+
+    // 修改签名
+    @Test
+    public void testModifySignature() throws Exception {
+
+        User user = new User();
+        user.setUserId(1);
+        user.setSignature("New Signature");
+
+        when(userService.update(any())).thenReturn(true);
+
+        mockMvc.perform(put("/user/signature")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(objectMapper.writeValueAsString(user)))
+                .andExpect(status().isOk());
+    }
+
+    // 修改密码
+    @Test
+    public void testModifyPassword_success() throws Exception {
+
+        // 密码正确
+        when(userService.getOne(any())).thenReturn(new User(1, "hcy", "oldPass", null, 0, 0, null, 0, 0, 0));
+        when(userService.update(any())).thenReturn(true);
+
+        mockMvc.perform(put("/user/password")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(objectMapper.writeValueAsString(new ModifyPasswordDTO(1, "oldPass", "newPass"))))
+                .andExpect(status().isOk());
+    }
+
+    @Test
+    public void testModifyPassword_wrongPassword() throws Exception {
+
+        // 密码错误
+        when(userService.getOne(any())).thenReturn(new User(1, "hcy", "oldPass", null, 0, 0, null, 0, 0, 0));
+
+        mockMvc.perform(put("/user/password")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(objectMapper.writeValueAsString(new ModifyPasswordDTO(1, "wrongPassword", "newPass"))))
+                .andExpect(status().is(408));
+    }
+
+    // 修改头像
+    @Test
+    public void testModifyAvatar() throws Exception {
+
+        // 设置请求参数
+        User user = new User();
+        user.setUserId(1);
+        user.setAvatar("avatar.png");
+
+        when(userService.update(any())).thenReturn(true);
+
+        mockMvc.perform(put("/user/avatar")
+                        .contentType(MediaType.APPLICATION_JSON)
+                        .content(objectMapper.writeValueAsString(user)))
+                .andExpect(status().isOk());
+    }
 }
\ No newline at end of file
