@ControllerAdvice
類我有一個@ExceptionHandler
,這個處理程序在控制器錯誤下工作良好,但是如果我有一個過濾器,它們將無法處理異常。我如何處理這些異常?控制器外的彈簧異常處理程序
過濾器是: -
public class AuthFilter extends UsernamePasswordAuthenticationFilter {
private LoginDTO loginDTO;
public AuthFilter() {
setRequiresAuthenticationRequestMatcher(
new AntPathRequestMatcher("/login", "POST"));
}
@Override
public Authentication attemptAuthentication(HttpServletRequest request,
HttpServletResponse response) throws AuthenticationException {
try {
loginDTO = new ObjectMapper().readValue(request.getReader(), LoginDTO.class);
} catch (Exception e) {
throw new APIException(ExceptionMessages.INVALID_LOGIN_JSON,
HttpStatus.BAD_REQUEST);
}
return super.attemptAuthentication(request, response);
}
...
}
的異常處理程序(在@ControllerAdvice)
@ExceptionHandler(APIException.class)
public ResponseEntity<ErrorDTO> handleAPIException(APIException e) {
return new ResponseEntity<ErrorDTO>(new ErrorDTO(e.getMessage()),
e.getHttpStatus());
}
UPDATE
我的要求是具有彈性安全領域的全球異常處理程序過濾器。有什麼辦法可以做到嗎?
這些錯誤由Spring Security處理,而不是由@ ExceptionHandler處理,因爲這些錯誤僅適用於控制器,並且在DispatcherServlet過濾器內執行,因此絕不會將'@ ExceptionHandler'移動到另一個過濾器,基本上將dispatcherservlet複製到過濾器)可以處理這個(也不應該是imho)。你也知道你的自定義過濾器有缺陷嗎? –
那麼是否有辦法在全球範圍內處理彈簧安全異常?不,不是,缺點是什麼? – Kaushik
Spring Security已經處理了這些異常,那有什麼問題?您有一個過濾器,並且對於每個請求,您將結果存儲在一個類級別屬性中,'loginDTO'現在您認爲10個請求進來後會發生什麼...... –