【发布时间】:2021-10-31 09:41:23
【问题描述】:
我有一个非常简单的REST API in Spring Boot 2 设置,带有JWT 令牌用于授权。当令牌过期时,它会引发如下错误 -
io.jsonwebtoken.ExpiredJwtException: JWT 过期时间 2021-09-01T10:02:26Z。当前时间:2021-09-01T15:12:48Z,有所不同 18622475 毫秒。允许的时钟偏差:0 毫秒。
我捕捉到异常并尝试通过@RestControllerAdvice 处理,但看起来它没有处理。知道我在这里缺少什么吗?
private Claims extractAllClaims(String token) {
try{
return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody();
}catch (ExpiredJwtException ex){
log.error("JWT token expired.");
throw ex;
}
}
ControllerAdvice -
@RestControllerAdvice
@Log4j2
public class DemoAppExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleExceptionInternal(Exception ex, Object body, HttpHeaders headers,
HttpStatus status, WebRequest request){
log.error("Error from demo application : {} ", ex.getMessage());
headers.setContentType(MediaType.APPLICATION_JSON);
return super.handleExceptionInternal(ex, body, headers, status, request);
}
@ExceptionHandler(ExpiredJwtException.class)
protected ResponseEntity<Object> handleExpiredJwtToken(ExpiredJwtException ex, WebRequest request){
ErrorMessage errorMessage = ErrorMessage.builder()
.message("Token Expired")
.statusCode(UNAUTHORIZED.value())
.build();
return handleExceptionInternal(ex, errorMessage, new HttpHeaders(), UNAUTHORIZED, request);
}
}
【问题讨论】:
-
请参考here 并申请。让我知道它是否有效。谢谢!
标签: spring-boot jwt