Обработка исключения DataAccessException в Spring Security

#database #exception-handling #spring-security

#База данных #исключение #spring-безопасность

Вопрос:

Прямо сейчас у меня есть Spring Security, защищающий приложение с помощью базовой аутентификации. Сведения о пользователе поступают из источника JDBC. Если база данных выйдет из строя, внутренние компоненты пользовательского механизма загрузки выдадут DataAccessException . Класс поставщика проверки подлинности по умолчанию, DaoAuthenticationProvider , перехватывает исключение и сопоставляет его обратно с AuthenticationServiceException . Конечным результатом такого сопоставления является то, что браузер / клиент получает HTTP-код 401.

Что я хочу сделать, так это обработать недоступность базы данных другим способом. По крайней мере, я хочу, чтобы это было обработано путем ответа с помощью HTTP 503, но я бы предпочел, чтобы оно перенаправлялось на страницу ошибки. Как я могу этого добиться?

РЕДАКТИРОВАТЬ: решение Ritesh было частично правильным. Недостающие шаги, помимо реализации вашей собственной базовой точки входа, — это также использовать версию v3.0.3 схемы безопасности, чтобы у <http-basic/> элемента был entry-point-ref атрибут. Если вы не используете этот специальный атрибут, базовый фильтр по умолчанию всегда будет использовать свою собственную реализацию базовой точки входа.

Ответ №1:

BasicAuthenticationEntryPoint Отправляет 401 для AuthenticationException . Вы можете создать свою собственную пользовательскую точку входа для обработки AuthenticationServiceException и отправки 503.

Другой вариант — ничего не делать в точке входа и использовать SimpleMappingExceptionResolver и / или реализовать свой собственный HandlerExceptionResolver .