-
현재 argumentResolver에서는 아래와 같이 인증 정보를 검증하고 있습니다. @Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory)
throws AuthenticationException {
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
HttpSession session = request.getSession(false);
if (session == null) {
throw new AuthenticationException("로그인이 필요합니다");
}
Long kakaoId = (Long) session.getAttribute(SESSION_KEY);
return memberRepository.findByKakaoId(kakaoId)
.orElseThrow(() -> new NoSuchElementException("회원을 찾을 수 없습니다."));
} 제가 고민이 되는 부분은
어떤 예외를 발생시키느냐에 따라 클라이언트에 내려주는 응답도 달라질 것 같아요. 여러분의 생각을 공유해주십쇼!🌱 |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments
-
저는 2번에 동의하는 편입니다. |
Beta Was this translation helpful? Give feedback.
-
클라이언트 관점에서 로그인 검증을 수행한다를 하나의 작업단위로 본다면 해당 로직을 수행하는 과정에서 나오는 에러는 동일해야하지않을까? 라는 생각이듭니다. 저희가 서비스, 비즈니스로직을 구성하는 과정에서 발생하는 예외는 서로 다른 도메인들을 사용하고 있기 때문에 다양한 에러를 사용하고있다고 생각합니다. 하지만 사용자 인증을 수행한다는 플로우는 Service 레이어가아닌 Presentation 레이어에서 동작한다고 생각합니다. 때문에 클라이언트가 수행한 인증이라는 흐름으로부터 발생한 예외는 401이 발생한다. 라는 통일성이 있으면 좋을것 같다는 의견입니다! |
Beta Was this translation helpful? Give feedback.
-
두 분 의견 감사합니다~ 정답이 없는 문제라 많이 고민이 되었는데요! |
Beta Was this translation helpful? Give feedback.
두 분 의견 감사합니다~ 정답이 없는 문제라 많이 고민이 되었는데요!
클라이언트 관점에서 member 에 대한 요청을 하지 않은 경우, member가 존재하지 않아 404 status를 받으면 다른 문제로 오인 할 수 있고, 어떤문제가 있는지 직관적으로 알기 어려울 것 같아요.
결론적으로 authenticationException 을 던져서 401으로 응답하는게 좋을 것 같습니다!