2016-03-04 25 views

Odpowiedz

7

JWT obiekty są Base64URL zakodowane. Oznacza to, że zawsze można odczytać nagłówki i ładunek ręcznie poprzez dekodowanie Base64URL. W takim przypadku po prostu zignorujesz atrybut exp.

Na przykład można zrobić tak (używam Java8 wbudowany Base64 klasy, ale można użyć dowolnej zewnętrznej biblioteki, takich jak Apache Commons Codec):

Base64.Decoder decoder = Base64.getUrlDecoder(); 
String src = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImV4cCI6IjEzMDA4MTkzODAifQ.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.2GpoV9q_uguSg0Ku6peI5aZ2qBxO5qOA42zaS25gq_c"; 
String[] parts = src.split("\\."); // Splitting header, payload and signature 
System.out.println("Headers: "+new String(decoder.decode(parts[0]))); // Header 
System.out.println("Payload: "+new String(decoder.decode(parts[1]))); // Payload 

i wyjście to:

Headers: {"alg":"HS256","typ":"JWT","exp":"1300819380"} 
Payload: {"sub":"1234567890","name":"John Doe","admin":true} 

Należy również pamiętać, że atrybut exp jest ustawiony na 1300819380, co odpowiada 16 january 2016.

7

Istnieje lepsze podejście, aby to zrobić. , jeśli zobaczysz obiekt obsługi wyjątku JWT np. ExpiredJwtException, sam obiekt Expekcji zawiera: - nagłówek, oświadczenie i komunikat

, więc roszczenia można łatwo wyodrębnić za pośrednictwem tego obiektu, tj.

ExpiredJwtException consturct jest następująca: -

public ExpiredJwtException(Header header, Claims claims, String message) { 
     super(header, claims, message); 
} 

Przykład: -

try{ 
     // executable code 
    }catch(ExpiredJwtException e){ 
     System.out.println("token expired for id : " + e.getClaims().getId()); 
    }