intro
- 프로젝트를 진행하며 발생한 문제 상황과 해결 과정들을 상세히 기록하고 추후에 같은 문제가 발생 했을때 빠르게 문제 해결하기 위해 트러블 슈팅을 정리할려고 한다.
- 기록하는 습관을 기르기 위해 프로젝트 기간동안 꾸준히 작성할 것 이다.
JPA 를 활용한 TodoList 프로젝트에서 예외처리를 하는 중 Filter 에서 던지는 예외처리를 ErrorResponse 로 안받아진다.
⚠️ 1.문제 상황 발생
비밀번호를 잘못 입력해서 예외가 발생하면 Valid를 이용하여 처리가 가능했다.
BUT,,
Filter 에서 던져주는 예외처리를 위의 형식으로 처리해주지 못한다.
🔎 2.원인 추론
API 가 실행되면 Servlet 을 통해 Controller 로 가기이전 Filter를 이용하여 값을 처리 해준다.
그런데 @ControllAdvice 는 servelet 까지 요청이 넘어온후 그후 요청이 처리되는 Controller 와 같은 과정에서 발생한 예외만 처리 가능하다.
그래서 Servlet 이전에 처리하는 Filter 에서 발생한 예외는 처리하지 못한다.
📝 3.해결방안
필터 내에서 따로 예외를 처리하면 됐다. Http에 보여질 HttpServletResponse 메소드를 이용해 예외를 JSON 형태로 보여준다.
- HttpServletResponse 메소드
HttpServletRequest httpRequest = (HttpServletRequest) request;
String requestURI = httpRequest.getRequestURI();
HttpServletResponse httpResponse = (HttpServletResponse) response;
if(!isWhiteList(requestURI)){
HttpSession session = httpRequest.getSession(false);
if (session == null || session.getAttribute(Const.LOGIN_USER) == null){
httpResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
httpResponse.setContentType("application/json");
httpResponse.setCharacterEncoding("UTF-8");
httpResponse.getWriter().write("{ message : 로그인 해주세요 }");
return;
}
}
chain.doFilter(request,response);
}
📌4.결과 확인
로그인하지 않고 일정을 생성하면 401Unauthorized 코드와 함께 로그인을 해달라는 메시지를 전달한다.
'프로젝트 > 트러블슈팅' 카테고리의 다른 글
[JAVA]Enum 에 선언된 메소드 호출오류 (0) | 2025.03.13 |
---|---|
[JAVA]리스트 초기화 오류 (1) | 2025.03.05 |
[JAVA]입력 버퍼비우기 - (Next() , NextLine()) (0) | 2025.03.05 |