Ausgabe
Ich entwickle eine Java-Anwendung (mit Spring Boot) und brauche Hilfe: Diese Anwendung erhält als Eingabe ein JWT-Token , das ich in einer Methode verarbeite. Die Methode ist vorerst folgende:
private UsernamePasswordAuthenticationToken myMethod(HttpServletRequest request) {
// Code that gets the 'token' String
try{
Map<String, String> registry = ((Map<String, String>) (token.getBody().get("registry")));
String sub = ((String) (parsedToken.getBody().get("sub")));
UsernamePasswordAuthenticationToken finalToken = new UsernamePasswordAuthenticationToken(sub, null, null);
return finalToken;
} catch (ExpiredJwtException exception) { // Only here I have the certainty that the token has expired!
// Code that handles the exception
}
}
Ich muss jedoch eine Logik implementieren, die an mehreren Stellen prüfen muss, ob das erhaltene Token abgelaufen ist oder nicht, ohne diese Methode jedes Mal auszuführen . Der einzige Weg, wie ich wissen muss, ob token
abgelaufen ist, ist die von ausgelöste Ausnahme ExpiredJwtException
.
Gibt es eine Möglichkeit zu wissen, ob das Token abgelaufen ist, ohne die abgefangene Ausnahme zu durchlaufen ? Zum Beispiel wäre es sehr nützlich, wenn es eine „Token“-Klasse gäbe, die ein .isExpired
Attribut oder ähnliches hat.
Ich möchte nicht auf die Behandlung der Ausnahme eingehen, da dies bedeutet, dass ich mich try
jedes Mal auf den (langen) Code des Blocks verlassen würde, wenn ich überprüfen muss, ob ein Token abgelaufen ist oder nicht, und das möchte ich nicht sein.
Lösung
Wenn Sie eine andere JWT-Bibliothek verwenden, können Sie dies problemlos tun. Die JWT-Bibliothek auth0 verfügt über Methoden zum Analysieren und optional zum Verifizieren des Tokens:
import com.auth0.jwt.JWT;
import com.auth0.jwt.exceptions.JWTDecodeException;
import com.auth0.jwt.interfaces.DecodedJWT;
DecodedJWT jwt = JWT.decode(token);
if( jwt.getExpiresAt().before(new Date())) {
System.out.println("token is expired");
}
Beantwortet von – stdunbar
Antwort geprüft von – Gilberto Lyons (FixError Admin)