我正在使用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呢?
1条答案
按热度按时间plupiseo1#
因此尝试添加注解
@ExceptionHandler(AuthenticationException.class)
:如欲了解更多信息,请访问:https://www.baeldung.com/exception-handling-for-rest-with-spring深入了解Spring MVC处理异常: