#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
.