现在我已经让Spring Security使用基本身份验证来保护应用程序。用户详细信息来自JDBC源。如果数据库发生故障,用户加载机制的内部将抛出DataAccessException
。默认身份验证提供程序类DaoAuthenticationProvider
捕获异常并将其映射回AuthenticationServiceException
。这种映射的最终结果是浏览器/客户端接收HTTP代码401。
我想要做的是以不同的方式处理数据库不可用性。至少,我希望通过HTTP 503响应来处理它,但我更喜欢它重定向到错误页面。我怎样才能做到这一点?
编辑: Ritesh的解决方案部分正确。除了实现您自己的Basic入口点之外,缺少的步骤还是使用安全模式的v3.0.3,以便<http-basic/>
元素具有entry-point-ref
属性。如果不使用此特殊属性,则默认的基本过滤器将始终使用自己的基本入口点实现。
答案 0 :(得分:2)
BasicAuthenticationEntryPoint
为AuthenticationException
发送401。您可以创建自己的自定义入口点来处理AuthenticationServiceException
并发送503。
其他选项不是在切入点执行任何操作并使用SimpleMappingExceptionResolver
和/或实现您自己的HandlerExceptionResolver
。