2016-03-04 18 views

risposta

7

oggetti JWT sono Base64URL codificati. Ciò significa che puoi sempre leggere le intestazioni e il carico utile manualmente decodificandolo Base64URL. In questo caso ignorerai semplicemente l'attributo exp.

Per esempio si può fare come questo (sto usando Java8 built-in Base64 classe, ma è possibile utilizzare qualsiasi libreria esterna, come ad esempio 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 

e l'uscita è:

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

Si noti inoltre che l'attributo exp è impostato su 1300819380, che corrisponde a 16 january 2016.

7

C'è un approccio migliore per farlo. se si vede oggetto gestore JWT eccezione ad es. ExpiredJwtException, expection oggetto stesso contiene le seguenti: - intestazione, sinistri e messaggio

così rivendicazioni può facilmente estratto attraverso questo oggetto cioè e.getClaims().getId() dove e è oggetto ExpiredJwtException.

ExpiredJwtException consturct è la seguente: -

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

Esempio: -

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