ExceptionHandler не перехватывает исключения

126
04 апреля 2021, 15:20

Итак, у меня есть исключение:

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

Подскажите, что не так?

READ ALSO
Retrofit2 и ошибка SSLHandshakeException SSLProtocolException

Retrofit2 и ошибка SSLHandshakeException SSLProtocolException

Нужно решить проблему с эксепшн

103
Java Maps of Lamda

Java Maps of Lamda

Требуется перевести оператор switch в лямбда-выраженияДля этого нужно сделать Map(у) с возможными командами, и в зависимости от символа сделать...

174
Как запустить чужой проект в Intellij Idea

Как запустить чужой проект в Intellij Idea

Все классы подсветились оранжевым и написано что нет SDKSDK подключил 1

299
Запись данных из .json файла в JTable

Запись данных из .json файла в JTable

У меня естьjson файл типа:

111