diff --git a/pom.xml b/pom.xml
index b67af1d..cb38de6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -20,7 +20,7 @@
3.11.0
- 2.12.0
+ 2.14.2
2.4.0
diff --git a/src/main/java/apiCalls/Utils/generic/BaseAPI.java b/src/main/java/apiCalls/Utils/generic/BaseAPI.java
index dda640e..434329d 100644
--- a/src/main/java/apiCalls/Utils/generic/BaseAPI.java
+++ b/src/main/java/apiCalls/Utils/generic/BaseAPI.java
@@ -43,15 +43,30 @@ public synchronized String adminJWT() throws HttpException {
private boolean isTokenExpired(String token) {
try {
- var decodedJWT = Jwts.parser()
- .unsecured()
- .build()
- .parseUnsecuredClaims(token)
- .getPayload();
+
+ String[] chunks = token.split("\\.");
+ if (chunks.length != 3) {
+ LOGGER.error("Invalid JWT format - expected 3 parts but got {}", chunks.length);
+ return true;
+ }
+
+ String payload = new String(java.util.Base64.getUrlDecoder().decode(chunks[1]));
+
+ com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
+ com.fasterxml.jackson.databind.JsonNode claims = mapper.readTree(payload);
- return decodedJWT.getExpiration().before(new Date());
+ if (claims.has("exp")) {
+ long expTime = claims.get("exp").asLong() * 1000; // Convert from seconds to milliseconds
+ boolean expired = expTime < System.currentTimeMillis();
+ LOGGER.debug("Token expiration check: exp={}, current={}, expired={}",
+ new Date(expTime), new Date(), expired);
+ return expired;
+ } else {
+ LOGGER.warn("Token has no expiration claim, treating as expired");
+ return true;
+ }
} catch (Exception e) {
- LOGGER.error("Error decoding token: {}", e.getMessage());
+ LOGGER.error("Error checking token expiration: {}", e.getMessage());
return true;
}
}