feat(auth): JwtTokenProvider 增加 userType 字段,支持 ADMIN/MEMBER 区分
- 新增四参数 generateToken 方法,支持传入 userType - 旧方法默认 userType=ADMIN,保持向后兼容 - 新增 getUserTypeFromToken 方法解析 Token 中的 userType - 补充 userType 相关单元测试
This commit is contained in:
+10
-11
@@ -32,24 +32,19 @@ public class JwtTokenProvider {
|
||||
}
|
||||
|
||||
public String generateToken(String username, Long userId) {
|
||||
Map<String, Object> 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<String> roles) {
|
||||
return generateToken(username, userId, roles, "ADMIN");
|
||||
}
|
||||
|
||||
public String generateToken(String username, Long userId, java.util.List<String> roles, String userType) {
|
||||
Map<String, Object> 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);
|
||||
|
||||
+48
@@ -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");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user