我正在使用Spring Boot开发rest api。我有一个扩展UsernamePasswordAuthenticationFilter
的类,在这里我重写了attemptAuthentication
方法。在身份验证过程中,Spring内部使用我的CustomUserDetailsService
,如果找不到用户,则抛出异常。 Spring内部处理该异常并抛出InternalAuthenticationServiceException
。问题是,我无法在我自定义错误发生时自定义响应的中心位置捕获该异常。我为此使用了@ControllerAdvice
,但是看来Spring只是忽略并总是发送默认的“内部服务器错误”。
答案 0 :(得分:1)
要捕获“失败的身份验证”,只需在您的过滤器
中覆盖方法unsuccessfulAuthentication
@Override
protected void unsuccessfulAuthentication(
HttpServletRequest request,
HttpServletResponse response,
AuthenticationException failed)
throws IOException, ServletException {
//handle errors
}