diff --git a/src/main/java/edu/bjtu/groupone/backend/api/UserController.java b/src/main/java/edu/bjtu/groupone/backend/api/UserController.java
index c4ebbec..620e885 100644
--- a/src/main/java/edu/bjtu/groupone/backend/api/UserController.java
+++ b/src/main/java/edu/bjtu/groupone/backend/api/UserController.java
@@ -71,11 +71,10 @@
         u.setPassword(request.getPassword());
         User user = userService.login(u);
         if (user != null) {
-            var payload = java.util.Map.<String, Object>of(
-                    "id", user.getUserId(),
-                    "username", user.getUsername(),
-                    "email", user.getEmail()
-            );
+            var payload = new ClaimsDTO();
+            payload.setEmail(user.getEmail());
+            payload.setUsername(user.getUsername());
+            payload.setUserid(user.getUserId());
             String token = JwtUtils.generateJwt(payload);
             return Result.success(token);
         }
@@ -278,19 +277,20 @@
                     )
             }
     )
-    @GetMapping("/api/me")
+
+    @GetMapping("/me")
     public Result<UserInfoResponse> me(@Parameter(in = ParameterIn.HEADER, description = "JWT认证令牌") @RequestHeader("token") String token) {
-        var claims = JwtUtils.parseJwt(token);
-        if (claims == null) {
-            return Result.error("无效的 token");
+        ClaimsDTO claims;
+        try {
+            claims = JwtUtils.parseJwt(token);  // 解析JWT
+        } catch (RuntimeException e) {
+            return Result.error("无效的 token: " + e.getMessage());  // 处理 JWT 异常
         }
-        UserInfoResponse info = new UserInfoResponse(
-                (String) claims.get("username"),
-                token
-        );
+        UserInfoResponse info = new UserInfoResponse(claims.getUsername(), claims.getUserid());
         return Result.success(info);
     }
 
+
     @DeleteMapping("/{userId}")
     @Operation(summary = "删除用户")
     public Result<String> deleteUser(@PathVariable int userId) {
@@ -368,25 +368,20 @@
             @Parameter(in = ParameterIn.HEADER, description = "旧的 JWT 令牌", required = true)
             @RequestHeader("token") String oldToken
     ) {
-        Claims claims;
+        ClaimsDTO claims;
         try {
             // 尝试解析；如果尚未过期，parseJwt 会返回 Claims
             claims = JwtUtils.parseJwt(oldToken);
         } catch (ExpiredJwtException ex) {
             // 如果已过期，则从异常中获取过期前的 Claims
-            claims = ex.getClaims();
+            claims = new ClaimsDTO(ex.getClaims());
         } catch (Exception ex) {
             // 其它解析错误（签名无效等）
             return Result.error("无效的 token");
         }
 
         // 从原有的 Claims 中提取用户信息，重新生成新的 token
-        var payload = java.util.Map.<String, Object>of(
-                "id", claims.get("id"),
-                "username", claims.get("username"),
-                "email", claims.get("email")
-        );
-        String newToken = JwtUtils.generateJwt(payload);
+        String newToken = JwtUtils.generateJwt(claims);
         return Result.success(newToken);
     }
     @Operation(
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/dto/ClaimsDTO.java b/src/main/java/edu/bjtu/groupone/backend/domain/dto/ClaimsDTO.java
new file mode 100644
index 0000000..1fddd4f
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/dto/ClaimsDTO.java
@@ -0,0 +1,29 @@
+package edu.bjtu.groupone.backend.domain.dto;
+
+import io.jsonwebtoken.Claims;
+import io.swagger.models.auth.In;
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class ClaimsDTO {
+    // Getters 和 Setters
+    private int userid;
+    private String username;
+    private String email;
+
+    public ClaimsDTO() {
+        this.userid = 0;
+        this.username = "";
+        this.email = "";
+    }
+
+    public ClaimsDTO(Claims claims) {
+        // 将 claims 映射到 ClaimsDTO
+        this.setUserid(((Number) claims.get("userid")).intValue());  // 确保 userid 是 Long 类型
+        this.setUsername((String) claims.get("username"));
+        this.setEmail((String) claims.get("email"));
+    }
+}
+
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/dto/UserInfoResponse.java b/src/main/java/edu/bjtu/groupone/backend/domain/dto/UserInfoResponse.java
index 99ab656..64960b9 100644
--- a/src/main/java/edu/bjtu/groupone/backend/domain/dto/UserInfoResponse.java
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/dto/UserInfoResponse.java
@@ -6,15 +6,14 @@
 @Data
 @Schema(description = "用户信息响应")
 public class UserInfoResponse {
-
+    @Schema(description = "用户id", example = "1")
+    private int userid;
     @Schema(description = "用户名", example = "john_doe")
     private String username;
 
-    @Schema(description = "JWT认证令牌", example = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...")
-    private String token;
 
-    public UserInfoResponse(String username, String token) {
+    public UserInfoResponse(String username, int userid) {
         this.username = username;
-        this.token = token;
+        this.userid = userid;
     }
 }    
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/utils/GetTokenUserId.java b/src/main/java/edu/bjtu/groupone/backend/utils/GetTokenUserId.java
index 63dda65..3f803b3 100644
--- a/src/main/java/edu/bjtu/groupone/backend/utils/GetTokenUserId.java
+++ b/src/main/java/edu/bjtu/groupone/backend/utils/GetTokenUserId.java
@@ -1,5 +1,6 @@
 package edu.bjtu.groupone.backend.utils;
 
+import edu.bjtu.groupone.backend.domain.dto.ClaimsDTO;
 import io.jsonwebtoken.Claims;
 import jakarta.servlet.http.HttpServletRequest;
 
@@ -9,7 +10,7 @@
         String token = request.getHeader("token");
         // 解析 JWT Token，获取用户 ID
         String jwt = token.substring(7); // 去掉 'Bearer ' 前缀
-        Claims claims = JwtUtils.parseJwt(jwt); // 从 JWT 中获取用户 ID
-        return claims.get("id").toString();
+        ClaimsDTO claims = JwtUtils.parseJwt(jwt); // 从 JWT 中获取用户 ID
+        return Integer.toString(claims.getUserid());
     }
 }
diff --git a/src/main/java/edu/bjtu/groupone/backend/utils/JwtUtils.java b/src/main/java/edu/bjtu/groupone/backend/utils/JwtUtils.java
index 45e736b..b2d2228 100644
--- a/src/main/java/edu/bjtu/groupone/backend/utils/JwtUtils.java
+++ b/src/main/java/edu/bjtu/groupone/backend/utils/JwtUtils.java
@@ -1,36 +1,47 @@
 package edu.bjtu.groupone.backend.utils;
 
+import edu.bjtu.groupone.backend.domain.dto.ClaimsDTO;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
+import io.jsonwebtoken.ExpiredJwtException;
+import io.jsonwebtoken.MalformedJwtException;
+import io.jsonwebtoken.SignatureException;
+import io.jsonwebtoken.UnsupportedJwtException;
 
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Map;
 
 public class JwtUtils {
+    private static final String SECRET_KEY = "Bjtu";
 
-
-
-    // 生成JWT// 生成JWT
-    public static String generateJwt(Map<String,Object> claims) {
-
-        String jwt = Jwts.builder().
-                addClaims(claims)
-                .signWith(io.jsonwebtoken.SignatureAlgorithm.HS256, "Bjtu")
-                .setExpiration(new Date(System.currentTimeMillis() + 43200000L))
-                .compact();
-
-
-        return jwt;
-
-
-    }
-
-    public static Claims parseJwt(String jwt) {
-
-        return Jwts.parser()
-                .setSigningKey("Bjtu")
+    // 解析JWT并映射到 ClaimsDTO
+    public static ClaimsDTO parseJwt(String jwt) {
+        Claims claims = Jwts.parser()
+                .setSigningKey(SECRET_KEY)
                 .parseClaimsJws(jwt)
                 .getBody();
+        return new ClaimsDTO(claims);
     }
 
-}
\ No newline at end of file
+    // 默认过期时间为 2 小时（7200000 毫秒）
+    private static final long DEFAULT_EXPIRATION = 7200000L;
+    // 生成JWT
+    public static String generateJwt(ClaimsDTO claimsDTO, long expirationMillis) {
+        Map<String, Object> claims = new HashMap<>();
+        claims.put("userid", claimsDTO.getUserid());
+        claims.put("username", claimsDTO.getUsername());
+        claims.put("email", claimsDTO.getEmail());
+
+        return Jwts.builder()
+                .addClaims(claims)
+                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
+                .setExpiration(new Date(System.currentTimeMillis() + expirationMillis))
+                .compact();
+    }
+
+    public static String generateJwt(ClaimsDTO claims) {
+        return generateJwt(claims, DEFAULT_EXPIRATION);
+    }
+}
