Siv*_*ash 10 java jwt json-web-token
如果我们尝试解析过期 JWT,则会导致过期异常.
即使JWT已过期,有没有办法阅读索赔.
下面用于解析java中的JWT:
Jwts.parser().setSigningKey(secret.getBytes()).parseClaimsJws(token).getBody();
小智 22
有一个更好的方法来做到这一点.如果您看到JWT异常处理程序对象,例如ExpiredJwtException,则对象本身包含以下内容: - 标题,声明和消息
所以声明可以通过这个对象轻松提取,即e.getClaims().getId()e是ExpiredJwtException对象.
ExpiredJwtException consturct如下: -
public ExpiredJwtException(Header header, Claims claims, String message) {
super(header, claims, message);
}
Run Code Online (Sandbox Code Playgroud)
例:-
try{
// executable code
}catch(ExpiredJwtException e){
System.out.println("token expired for id : " + e.getClaims().getId());
}
Run Code Online (Sandbox Code Playgroud)
use*_*612 12
JWT对象是Base64URL编码的.这意味着您始终可以通过手动Base64URL解码来读取标头和有效负载.在这种情况下,您将忽略exp属性.
例如,您可以这样做(我使用的是Java8内置Base64类,但您可以使用任何外部库,例如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
Run Code Online (Sandbox Code Playgroud)
输出是:
Headers: {"alg":"HS256","typ":"JWT","exp":"1300819380"}
Payload: {"sub":"1234567890","name":"John Doe","admin":true}
Run Code Online (Sandbox Code Playgroud)
请注意,该exp属性设置为1300819380,对应于16 january 2016.
小智 6
这可能已经过时了,但是对于任何面临此问题的人来说,javaio.jsonwebtoken
ExpiredJwtException已经在其中获得了声明,您可以通过调用e.getClaims().
| 归档时间: |
|
| 查看次数: |
8171 次 |
| 最近记录: |