본문 바로가기

개발일지/TIL

[230712] Filter에서 400 상태코드 내려주기

Filter에서 ExceptionHadler

✔ filter 코드

 

if(!jwtProvider.validateToken(token)){
    throw new IllegalArgumentException("유효하지 않은 토큰입니다");
}

 

✔ CustomExceptionHandler 코드

 

@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity handleUserException(IllegalArgumentException e) {
    log.error("IllegalException",e);
    return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(e.getMessage());
}

 

✔ 문제

❗Spring에서 설정해 놓은 Handler는 Filter에서 일어나는 예외를 잡아서 처리해주지 못했다. 여전히 500 상태코드가 날아가는 문제가 일어났다.

Filter에서 HttpServletReponse를 통한 상태 및 메시지 추가

filter 수정 코드

 

if(!jwtProvider.validateToken(token)){
    httpServletResponse.setStatus(400);
    httpServletResponse.setContentType("text/plain;charset=UTF-8");
    httpServletResponse.getWriter().write("토큰이 유효하지 않습니다.");
    return;
}

 

✔ 결과

 

생각

Filter가 Spring Container외부에 있다는 것을 다시금 알게 된 시간이었던 것 같다. 그리고 Header를 직접적으로 넣어본 일이 별로 없었는데, HttpServletResponse에 header를 추가함으로 문제를 해결해 볼 수 있어서 좋았다.