处理JWT SignatureException的最佳方法

时间:2020-10-19 10:28:28

标签: spring-boot jwt http-status-codes

当客户端向我的服务器发送无效令牌时,服务器将返回500状态代码。我认为这很丑。 400(错误请求)代码会更正确吗? 如果400码更正确,那么如何处理500错误?我试图捕获SignatureException并抛出ResponseStatusException,但随后收到如下响应:

{
    "timestamp": "2020-10-17T09:34:26.939+00:00",
    "status": 500,
    "error": "Internal Server Error",
    "message": "400 BAD_REQUEST \"cause: token is invalid\"",
    "path": "/toucan/user/delete"
}

我指定的消息和状态代码在错误消息中,代码为500。有没有办法在没有500的情况下抛出400状态?

1 个答案:

答案 0 :(得分:0)

首先,让我们谈谈状态码。
如果发送的令牌无效,则用户无权使用状态代码为401的API。
然后让我们讨论一下如何在Spring中拦截您的异常。您应该检查official documentation并在@ResponseStatus(value=HttpStatus.UNAUTHORIZED, reason="Invalid Token")类上使用SignatureException(或捕获它并使用注释添加自定义Exception)。
要么实现@ControllerAdvice来通过带有以下注释的方法来处理异常:@ExceptionHandler(value = SignatureException.class)
文档中都提到了这两种解决方案。