Итак, у меня есть исключение:
open class CustomException(open val code: String, override val message: String) : RuntimeException(message)
От него наследуются несколько других,
class DataAccessException(override val code: String, override val message: String) : CustomException(code, message)
class NoMatchingValueException(override val code: String, override val message: String) : CustomException(code, message)
class ApiException(override val code: String, override val message: String) : CustomException(code, message)
class JwtAuthenticationException(override val code: String, override val message: String) : CustomException(code, message)
которые и обрабатывает ExceptionHandler
. Сейчас он выглядит так:
@ExceptionHandler(value = [DataAccessException::class])
fun handle(exception: DataAccessException): ResponseEntity<AbstractDto> =
ResponseEntity.ok(AbstractDto(exception.code, exception.message))
@ExceptionHandler(value = [NoMatchingValueException::class])
fun handle(exception: NoMatchingValueException): ResponseEntity<AbstractDto> =
ResponseEntity.ok(AbstractDto(exception.code, exception.message))
@ExceptionHandler(value = [ApiException::class])
fun handle(exception: ApiException): ResponseEntity<AbstractDto> =
ResponseEntity.ok(AbstractDto(exception.code, exception.message))
@ExceptionHandler(value = [JwtAuthenticationException::class])
fun handle(exception: JwtAuthenticationException): ResponseEntity<AbstractDto> =
ResponseEntity
.status(HttpStatus.OK)
.body(AbstractDto(StatusCode.UNAUTHORIZED.name, exception.message!!))
Все исключения благополучно перехватываются хэндлером и выплёвывают на фронт нужное соообщение. Все, кроме последнего: JwtAuthenticationException
Это исключение выбрасывается только в одном случае, при валидации JWM-токена.
try {
return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody().getExpiration().after(new Date());
} catch (IllegalArgumentException e) {
throw new JwtAuthenticationException(StatusCode.UNAUTHORIZED.name(), "JWT token is invalid");
} catch (ExpiredJwtException e) {
throw new JwtAuthenticationException(StatusCode.UNAUTHORIZED.name(), "JWT token expired.");
}
При этом, в консоль выпадает почему-то сразу три стектрейса:
JwtAuthenticationException: JWT token expired.
...
ERROR 22059 --- [nio-8081-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] threw exception
JwtAuthenticationException: JWT token expired.
...
ERROR 22059 --- [nio-8081-exec-1] o.a.c.c.C.[Tomcat].[localhost] : Exception Processing ErrorPage[errorCode=0, location=/error]
JwtAuthenticationException: JWT token expired.
При этом, на фронт вылетает просто надпись:
HTTP Status 500 – Internal Server Error
Подскажите, что не так?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Требуется перевести оператор switch в лямбда-выраженияДля этого нужно сделать Map(у) с возможными командами, и в зависимости от символа сделать...
Все классы подсветились оранжевым и написано что нет SDKSDK подключил 1