【问题标题】:The best way for handle JWT SignatureException处理 JWT SignatureException 的最佳方法
【发布时间】:2021-02-02 02:54:33
【问题描述】:

当客户端向我的服务器发送无效令牌时,服务器将返回 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"
}

我指定的消息和状态码在 message in error with code 500 中。有没有办法在没有 500 的情况下抛出 400 状态?

【问题讨论】:

  • 要解释为什么throw ResponseStatusException 确实返回 500,您应该发布您实现的代码。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 2019-08-06
    • 2013-09-02
    • 2019-02-23
    相关资源
    最近更新 更多