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를 추가함으로 문제를 해결해 볼 수 있어서 좋았다.
'개발일지 > TIL' 카테고리의 다른 글
[230714] [미니] 모여봐요 인생네컷 S.A (0) | 2023.07.14 |
---|---|
[230713] Record 적용해보기 (0) | 2023.07.13 |
[230711] @Transactional(readOnly = true) (0) | 2023.07.11 |
[230710] Enum이란? (0) | 2023.07.10 |
[230709] Builder 패턴과 어노테이션 (0) | 2023.07.09 |