안녕하세요
제가 스프링으로 api 서버를 만들고 현재 로그인 기능을 만들고 있습니다.
인터셉터를 이용해서 로그인 하지 않은 클라이언트의 api 요청을 거르려고 하는데요 이때 클라이언트에게 로그인이 필요하다고 응답으로 알려주고 싶습니다.
인터셉터에서 로그인을 하지 않을 것을 알아냈다면 아래와 같이 HttpServletResponse 객체의 sendError를 통해 해결하면 되나 했는데요
if(session == null || session.getAttribute("memberId") == null){
response.sendError(400, "로그인 실패");
return false;
}
response.sendError(400, "로그인 실패");
return false;
}
이 방법이 api 서버라서 그런지 작동하지 않는 것 같습니다.
만약 인터셉터에서 걸려서 응답으로 로그인이 필요하다는 것을 알려주고 싶다면
1. NotLogInUser 같은 예외를 만들고 인터셉터에서 던지고
2. @ControllerAdvice를 이용해서 글로벌 예외 처리기를 만들어서 여기서 오류와 오류 메세지를 담은 ResponseEntity를 반환해야 하나요
그런데 로그인 처리 하나 때문에 글로벌 예외 처리기도 만들고 하는게 별로인 거 같습니다.
혹시 더 좋은 방법이나 실무에서는 어떻게 하는지 알고 있으신 분 있나요
1. `sendError` 대신 `response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);`와 `response.getWriter().write("로그인 필요");`를 사용해봐. 2. 예외 처리기를 만드는 건 과하지만, `@ControllerAdvice`로 글로벌 예외 처리기를 만들어 놓으면 다른 예외 처리에도
유용하니까 고려해볼만 해. 3. 실무에서는 주로 HandlerInterceptor로 로그인 검사를 하고, 필요한 경우 Filter나 Spring Security를 사용해서 더 세밀하게 조정해. 결론: sendError 대신 직접 상태 코드와 메시지 설정하는 방법 먼저 시도해보고, 그래도 해결 안 되면 예외 처리기도 고려해봐.
자세한 답변 감사합니다 말씀하신 거 생각하면서 해볼게요