Я ищу способ обработки буквально всех Exception
с в веб-приложении, основанный на централизованном запуске Spring Boot на контейнере сервлетов (Tomcat, Jetty).
В отличие от многихвопросы, заданные ранее, мое требование состоит в том, чтобы также перехватывать Exception
s, брошенные в фильтры контейнера , и иметь доступ к выбрасываемому экземпляру Exception
(не только к имени класса и сообщению, но и к фактическому экземпляру).
Я просто не хочу удивляться тому, что некоторые типы ошибок будут автоматически обрабатываться вне моего обработчика ошибок, например, создание страниц ошибок, специфичных для контейнера, специальная обработка в некоторых случаях (например, ошибка диспетчеров не найдена).
Другими словами Я ищу полную централизованную обработку ошибок cusotomizable , не только заменяющую внешний вид страницы ошибок по умолчанию.
Примечание Я не ищутакие решения, как:
@ControllerAdvice
с @ExceptionHandler(Exception.class)
, поскольку он не будет обрабатывать исключения, указанные в фильтрах контейнера (например, SpringФильтры безопасности и пользовательские) - Параметр «Диспетчерский сервлет
setThrowExceptionIfNoHandlerFound
» предназначен только для устранения некоторых проблем со страницей по умолчанию 404 - Замена
@Bean(name = "error")
вместо «Страница ошибки Whitelabel» с пользовательским представлением в видена данный момент обработка ошибок основана на некоторых обработанных атрибутах, и исходный экземпляр Exception
потерян - Решения основаны на разрешении представления Spring, так как я хочу необработанный доступ к исключению и ответу
- Решения, основанные намеханизм пересылки сервлетов для повторной обработки ответа по другому пути запроса, что затрудняет поиск и устранение неисправностей
Однажды мне удалось создать такой обработчик ошибок на основе фильтра Tomcat с наивысшим приоритетом вместе с настройкой диспетчера сервлетов инесколько грязных настроек, чтобы избежать визуализации страницы ошибки Tomcat, но я ищу лучшее решение.