KooK-PaP / kook-Pap-Server

국밥집 서버
1 stars 0 forks source link

Feat/#9 #11

Closed Ryooon2 closed 1 year ago

Ryooon2 commented 1 year ago

PR Summary

JWT & Security

예외처리

응답 DTO

PR Detail Description

JWT를 이용한 인증과정은 다음과 같습니다.

  1. JwtFilter의 doFilterInternal 호출
  2. request 헤더에서 JWT 토큰을 추출 후, JwtTokenProvider를 이용하여 유효성 검증. 2.1. 만일 유효하지 않다면, JwtTokenProvider에서 CustomException을 throw. 2.2. JwtFilter에서 해당 Exception을 캐치하여 request.setAttribute("exception", e.getErrorCode())을 수행 2.3. CustomAuthenticationEntryPoint에서 request의 Attribute에서 ErrorCode를 추출 후, ApplicationErrorResponse로 감싸서 HttpServletResponse 생성.
  3. 만일 유효하다면, JwtTokenProvider를 이용하여 Authentication 객체를 생성 후, SecurityContextHolder에 저장. (Authentication은 PrincipalDetails를 토대로 만들어짐)
  4. 다음 필터로 넘어감.

Exception: ErrorCode는 CustomException에서 근거로 사용될 수 있도록 작성한 Enum입니다.

CustomException은 어플리케이션 실행 도중, 의도치 않은 상황을 방지하기 위해 커스텀한 Exception으로, ErrorCode를 내부 필드로 갖습니다.

CustomExceptionHandler는 controller의 로직이 실행될때 발생하는 CustomException을 캐치하여, 해당 Exception을 토대로 ApplicationErrorResponse를 생성하고 반환하도록 의도하였습니다.

DTO: ApplicationResponse는 어플리케이션이 정상적으로 응답할때 사용하도록 의도한 제네릭 클래스입니다.

ApplicationErrorResponse는 어플리케이션이 비정상적으로 응답할때 사용하도록 의도한 오류 정보를 내포한 클래스입니다.

Screenshots (Optional)

image ErrorCode는 내부 필드로 HttpStatus, 오류 상황을 나타내는 message, 개발자가 임의로 지정하는 code를 갖습니다.

image ApplicationResponse는 위 사진과 같이 ok(ErrorCode errorCode, T object) 메서드를 통해 생성할 수 있습니다. 또한, 내부 필드, object가 실제로 보내고 싶은 객체가 담기는 필드입니다.