diff --git a/gym-manage-api/manage-sys/src/main/java/cn/novalon/gym/manage/sys/security/JwtTokenProvider.java b/gym-manage-api/manage-sys/src/main/java/cn/novalon/gym/manage/sys/security/JwtTokenProvider.java index 9035036..1a003b5 100644 --- a/gym-manage-api/manage-sys/src/main/java/cn/novalon/gym/manage/sys/security/JwtTokenProvider.java +++ b/gym-manage-api/manage-sys/src/main/java/cn/novalon/gym/manage/sys/security/JwtTokenProvider.java @@ -32,24 +32,19 @@ public class JwtTokenProvider { } public String generateToken(String username, Long userId) { - Map claims = new HashMap<>(); - claims.put("userId", userId); - claims.put("username", username); - - return Jwts.builder() - .setClaims(claims) - .setSubject(username) - .setIssuedAt(new Date()) - .setExpiration(new Date(System.currentTimeMillis() + jwtProperties.getExpiration())) - .signWith(getSigningKey()) - .compact(); + return generateToken(username, userId, java.util.Collections.emptyList(), "ADMIN"); } public String generateToken(String username, Long userId, java.util.List roles) { + return generateToken(username, userId, roles, "ADMIN"); + } + + public String generateToken(String username, Long userId, java.util.List roles, String userType) { Map claims = new HashMap<>(); claims.put("userId", userId); claims.put("username", username); claims.put("roles", roles); + claims.put("userType", userType); return Jwts.builder() .setClaims(claims) @@ -85,6 +80,10 @@ public class JwtTokenProvider { return java.util.Collections.emptyList(); } + public String getUserTypeFromToken(String token) { + return getClaimsFromToken(token).get("userType", String.class); + } + public boolean validateToken(String token) { try { getClaimsFromToken(token); diff --git a/gym-manage-api/manage-sys/src/test/java/cn/novalon/gym/manage/sys/security/JwtTokenProviderTest.java b/gym-manage-api/manage-sys/src/test/java/cn/novalon/gym/manage/sys/security/JwtTokenProviderTest.java index 33371ae..548badf 100644 --- a/gym-manage-api/manage-sys/src/test/java/cn/novalon/gym/manage/sys/security/JwtTokenProviderTest.java +++ b/gym-manage-api/manage-sys/src/test/java/cn/novalon/gym/manage/sys/security/JwtTokenProviderTest.java @@ -108,4 +108,52 @@ class JwtTokenProviderTest { assertThat(isValid).isFalse(); } + + @Test + void testGenerateTokenWithUserType() { + when(jwtProperties.getSecret()).thenReturn("test-secret-key-for-testing-purposes-only-1234567890"); + when(jwtProperties.getExpiration()).thenReturn(3600000L); + + String token = jwtTokenProvider.generateToken("testuser", 1L, java.util.List.of("admin"), "ADMIN"); + + assertThat(token).isNotNull(); + assertThat(token).isNotEmpty(); + } + + @Test + void testGetUserTypeFromToken() { + when(jwtProperties.getSecret()).thenReturn("test-secret-key-for-testing-purposes-only-1234567890"); + when(jwtProperties.getExpiration()).thenReturn(3600000L); + + String token = jwtTokenProvider.generateToken("testuser", 1L, java.util.List.of("admin"), "ADMIN"); + + String userType = jwtTokenProvider.getUserTypeFromToken(token); + + assertThat(userType).isEqualTo("ADMIN"); + } + + @Test + void testGetUserTypeFromToken_Member() { + when(jwtProperties.getSecret()).thenReturn("test-secret-key-for-testing-purposes-only-1234567890"); + when(jwtProperties.getExpiration()).thenReturn(3600000L); + + String token = jwtTokenProvider.generateToken("123", 123L, java.util.List.of(), "MEMBER"); + + String userType = jwtTokenProvider.getUserTypeFromToken(token); + + assertThat(userType).isEqualTo("MEMBER"); + } + + @Test + void testGetUserTypeFromToken_DefaultIsAdmin() { + when(jwtProperties.getSecret()).thenReturn("test-secret-key-for-testing-purposes-only-1234567890"); + when(jwtProperties.getExpiration()).thenReturn(3600000L); + + // 使用旧的两参数方法生成的 token 默认 userType 为 ADMIN + String token = jwtTokenProvider.generateToken("testuser", 1L); + + String userType = jwtTokenProvider.getUserTypeFromToken(token); + + assertThat(userType).isEqualTo("ADMIN"); + } } \ No newline at end of file