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) {
|
public String generateToken(String username, Long userId) {
|
||||||
Map<String, Object> claims = new HashMap<>();
|
return generateToken(username, userId, java.util.Collections.emptyList(), "ADMIN");
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String generateToken(String username, Long userId, java.util.List<String> roles) {
|
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<>();
|
Map<String, Object> claims = new HashMap<>();
|
||||||
claims.put("userId", userId);
|
claims.put("userId", userId);
|
||||||
claims.put("username", username);
|
claims.put("username", username);
|
||||||
claims.put("roles", roles);
|
claims.put("roles", roles);
|
||||||
|
claims.put("userType", userType);
|
||||||
|
|
||||||
return Jwts.builder()
|
return Jwts.builder()
|
||||||
.setClaims(claims)
|
.setClaims(claims)
|
||||||
@@ -85,6 +80,10 @@ public class JwtTokenProvider {
|
|||||||
return java.util.Collections.emptyList();
|
return java.util.Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getUserTypeFromToken(String token) {
|
||||||
|
return getClaimsFromToken(token).get("userType", String.class);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean validateToken(String token) {
|
public boolean validateToken(String token) {
|
||||||
try {
|
try {
|
||||||
getClaimsFromToken(token);
|
getClaimsFromToken(token);
|
||||||
|
|||||||
+48
@@ -108,4 +108,52 @@ class JwtTokenProviderTest {
|
|||||||
|
|
||||||
assertThat(isValid).isFalse();
|
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