Обработка DataAccessException в Spring Security - PullRequest
3 голосов
/ 07 апреля 2011

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

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

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

1 Ответ

2 голосов
/ 07 апреля 2011

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

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

...