为JWT添加了直接校验token是否有效而不需要提供username的功能。提高其鲁棒性

This commit is contained in:
高子兴 2024-07-01 18:39:08 +08:00
parent aa9e0d8804
commit c863f1023b
2 changed files with 34 additions and 3 deletions

View File

@ -30,14 +30,35 @@ public class JwtUtil {
}
public static String extractUsername(String token) {
try {
return extractClaims(token).getSubject();
} catch (Exception e) {
return null;
}
}
public static boolean isTokenValid(String token) {
try {
extractClaims(token);
} catch (Exception e) {
return false;
}
return true;
}
public static boolean isTokenValid(String token, String username) {
try {
return username.equals(extractClaims(token).getSubject()) && !isTokenExpired(token);
} catch (Exception e) {
return false;
}
}
private static boolean isTokenExpired(String token) {
try {
return extractClaims(token).getExpiration().before(new Date());
} catch (Exception e) {
return true;
}
}
}

View File

@ -43,5 +43,15 @@ public class JwtUtilTest {
// Validate token expires within 10 hours
Assert.assertTrue("Token should expire within 10 hours", expirationTime - currentTime <= 1000 * 60 * 60 * 10);
}
@Test
public void testInvalidToken() {
String invalidToken = "invalidToken";
String validToken = JwtUtil.generateToken("validUser");
Assert.assertFalse("Invalid token should not be valid", JwtUtil.isTokenValid(invalidToken));
Assert.assertTrue("Valid token should be able to extract", JwtUtil.isTokenValid(validToken));
Assert.assertFalse("Invalid token should not be valid", JwtUtil.isTokenValid(invalidToken, "validUser"));
Assert.assertTrue("Valid token should be valid", JwtUtil.isTokenValid(validToken, "validUser"));
}
}