Reputation: 5922
Right now I've got Spring Security protecting an application using basic authentication. The user details are coming from a JDBC source. If the database goes down, the internals of the user loading mechanism will throw a DataAccessException
. The default authentication provider class, DaoAuthenticationProvider
, catches the exception and maps it back to an AuthenticationServiceException
. The end result of such a mapping is that the browser/client receives HTTP code 401.
What I want to do is to handle database unavailability in a different way. At the very least, I want this to be handled by responding with HTTP 503 but I would prefer if it redirected to an error page. How can I achieve this?
EDIT: Ritesh's solution was partially correct. The missing steps apart from implementing your own Basic entry point is to also use v3.0.3 of the security schema so that the <http-basic/>
element has the entry-point-ref
attribute. If you don't use this special attribute, the default Basic filter will always use its own Basic entry point implementation.
Upvotes: 3
Views: 864
Reputation: 7522
The BasicAuthenticationEntryPoint
sends 401 for AuthenticationException
. You can create your own custom entry point to handle AuthenticationServiceException
and send out 503.
Other option is not to do anything in entry point and use SimpleMappingExceptionResolver
and/or implement your own HandlerExceptionResolver
.
Upvotes: 2