spring-security ControllerAdvice在Spring安全性之前捕获验证异常

sqyvllje  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(182)

我正在使用ControllerAdvice处理我的应用程序中的异常,它工作正常。但是,我开始使用Spring Security,通常我应该在下面的方法中捕获AuthenticationException。

@Override
    public void commence(HttpServletRequest request, HttpServletResponse response, 
        AuthenticationException authException)
            throws IOException, ServletException {
        logger.error("Unauthorized error: {}", authException.getMessage());

        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);

        final Map<String, Object> body = new HashMap<>();
        body.put("status", HttpServletResponse.SC_UNAUTHORIZED);
        body.put("error", "Unauthorized");
        body.put("message", authException.getMessage());
        body.put("path", request.getServletPath());

        final ObjectMapper mapper = new ObjectMapper();
        mapper.writeValue(response.getOutputStream(), body);
    }

当我移除我的异常处理类时,我可以在这个方法中捕获AuthenticationException。但是,当我使用我的异常处理机制时,它在这个commence方法之前捕获AuthenticationException。
我尝试使用@Order(value = Ordered.LOWEST_PRECEDENCE),但它没有任何意义。那么,我如何通过阻止ControllerAdvice捕获它们来捕获此commence方法中的AuthenticationException呢?

plupiseo

plupiseo1#

因此尝试添加注解@ExceptionHandler(AuthenticationException.class)

@ControllerAdvice
public class ControllerExceptionHandler {

@ExceptionHandler(AuthenticationException.class)
  ...
  public ErrorMessage resourceNotFoundException(AuthenticationException exception) {
    ...
  }
}

如欲了解更多信息,请访问:https://www.baeldung.com/exception-handling-for-rest-with-spring深入了解Spring MVC处理异常:

  • https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-exceptionhandlers
  • https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-ann-rest-exceptions

相关问题