From 2b0d2a057f8783a1270226a710ecc6375903ab1f Mon Sep 17 00:00:00 2001 From: Kwak Seong Joon Date: Thu, 23 Jan 2025 03:15:36 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=B9=B4=EC=B9=B4=EC=98=A4=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=20=EC=B6=94=EA=B0=80=20-=20#128?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/exception/UserBadRequestException.java | 2 +- .../com/cakey/user/exception/UserErrorCode.java | 6 +++++- .../cakey/user/exception/UserKakaoException.java | 15 +++++++++++++++ .../user/exception/UserNotFoundException.java | 2 +- .../java/com/cakey/user/service/UserService.java | 14 ++++++++++---- .../client/kakao/api/KakaoSocialService.java | 9 +++++++-- .../com/cakey/exception/AuthBaseException.java | 9 +++++++++ .../com/cakey/exception/AuthKakaoException.java | 8 ++++++++ 8 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 cakey-api/src/main/java/com/cakey/user/exception/UserKakaoException.java create mode 100644 cakey-auth/src/main/java/com/cakey/exception/AuthBaseException.java create mode 100644 cakey-auth/src/main/java/com/cakey/exception/AuthKakaoException.java diff --git a/cakey-api/src/main/java/com/cakey/user/exception/UserBadRequestException.java b/cakey-api/src/main/java/com/cakey/user/exception/UserBadRequestException.java index 9890ceb..e6319eb 100644 --- a/cakey-api/src/main/java/com/cakey/user/exception/UserBadRequestException.java +++ b/cakey-api/src/main/java/com/cakey/user/exception/UserBadRequestException.java @@ -6,7 +6,7 @@ public class UserBadRequestException extends UserApiBaseException{ - public UserBadRequestException(ErrorCode errorCode) { + public UserBadRequestException(final ErrorCode errorCode) { super(errorCode); } diff --git a/cakey-api/src/main/java/com/cakey/user/exception/UserErrorCode.java b/cakey-api/src/main/java/com/cakey/user/exception/UserErrorCode.java index ac14e0d..436ced2 100644 --- a/cakey-api/src/main/java/com/cakey/user/exception/UserErrorCode.java +++ b/cakey-api/src/main/java/com/cakey/user/exception/UserErrorCode.java @@ -11,7 +11,7 @@ public enum UserErrorCode implements ErrorCode { /** * 404 Not Found */ - KAKAO_LOGIN_FAILED(HttpStatus.BAD_REQUEST, 40030, "카카오 로그인에 실패하였습니다"), + /** * 404 Not Found @@ -19,6 +19,10 @@ public enum UserErrorCode implements ErrorCode { USER_SOCIAL_TYPE_NOT_FOUND(HttpStatus.NOT_FOUND, 40430, "유저의 소셜타입을 찾을 수 없습니다."), USER_NOT_FOUND(HttpStatus.NOT_FOUND, 40431, "유저를 찾을 수 없습니다."), + /** + * 500 Server Internal Error + */ + KAKAO_LOGIN_FAILED(HttpStatus.BAD_REQUEST, 50030, "카카오 로그인에 실패하였습니다"), ; private final HttpStatus httpStatus; diff --git a/cakey-api/src/main/java/com/cakey/user/exception/UserKakaoException.java b/cakey-api/src/main/java/com/cakey/user/exception/UserKakaoException.java new file mode 100644 index 0000000..607106a --- /dev/null +++ b/cakey-api/src/main/java/com/cakey/user/exception/UserKakaoException.java @@ -0,0 +1,15 @@ +package com.cakey.user.exception; + +import com.cakey.rescode.ErrorCode; +import org.springframework.http.HttpStatus; + +public class UserKakaoException extends UserApiBaseException{ + public UserKakaoException(final ErrorCode errorCode) { + super(errorCode); + } + + @Override + HttpStatus getStatus() { + return HttpStatus.INTERNAL_SERVER_ERROR; + } +} diff --git a/cakey-api/src/main/java/com/cakey/user/exception/UserNotFoundException.java b/cakey-api/src/main/java/com/cakey/user/exception/UserNotFoundException.java index be28320..99cacee 100644 --- a/cakey-api/src/main/java/com/cakey/user/exception/UserNotFoundException.java +++ b/cakey-api/src/main/java/com/cakey/user/exception/UserNotFoundException.java @@ -5,7 +5,7 @@ public class UserNotFoundException extends UserApiBaseException { - public UserNotFoundException(ErrorCode errorCode) { + public UserNotFoundException(final ErrorCode errorCode) { super(errorCode); } diff --git a/cakey-api/src/main/java/com/cakey/user/service/UserService.java b/cakey-api/src/main/java/com/cakey/user/service/UserService.java index db44492..3705460 100644 --- a/cakey-api/src/main/java/com/cakey/user/service/UserService.java +++ b/cakey-api/src/main/java/com/cakey/user/service/UserService.java @@ -6,29 +6,31 @@ import com.cakey.client.kakao.api.KakaoSocialService; import com.cakey.client.kakao.api.dto.KakaoUserDto; import com.cakey.client.kakao.api.dto.UserCreateDto; +import com.cakey.exception.AuthKakaoException; import com.cakey.jwt.auth.JwtProvider; import com.cakey.jwt.domain.Token; import com.cakey.jwt.domain.UserRole; -import com.cakey.user.domain.User; +import com.cakey.rescode.ErrorCode; import com.cakey.user.dto.LoginSuccessRes; import com.cakey.common.exception.NotFoundBaseException; import com.cakey.user.dto.UserInfoDto; import com.cakey.user.dto.UserInfoRes; import com.cakey.user.exception.UserBadRequestException; import com.cakey.user.exception.UserErrorCode; +import com.cakey.user.exception.UserKakaoException; import com.cakey.user.exception.UserNotFoundException; import com.cakey.user.facade.UserFacade; import com.cakey.user.facade.UserRetriever; import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; import org.springframework.http.ResponseCookie; -import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; -import java.util.Optional; @Service +@Slf4j @RequiredArgsConstructor public class UserService { @@ -50,7 +52,11 @@ public LoginSuccessRes login( final KakaoUserDto kakaoUserInfo; if (loginReq.socialType().equals(SocialType.KAKAO)) { - kakaoUserInfo = kakaoSocialService.getKakaoUserInfo(authorizationCode, loginReq.redirectUri()); + try { + kakaoUserInfo = kakaoSocialService.getKakaoUserInfo(authorizationCode, loginReq.redirectUri()); + } catch (AuthKakaoException e) { + throw new UserKakaoException(UserErrorCode.KAKAO_LOGIN_FAILED); + } } else { throw new UserBadRequestException(UserErrorCode.KAKAO_LOGIN_FAILED); } diff --git a/cakey-auth/src/main/java/com/cakey/client/kakao/api/KakaoSocialService.java b/cakey-auth/src/main/java/com/cakey/client/kakao/api/KakaoSocialService.java index 0e95bcd..c458722 100644 --- a/cakey-auth/src/main/java/com/cakey/client/kakao/api/KakaoSocialService.java +++ b/cakey-auth/src/main/java/com/cakey/client/kakao/api/KakaoSocialService.java @@ -4,14 +4,18 @@ import com.cakey.client.kakao.api.dto.KakaoAccessTokenRes; import com.cakey.client.kakao.api.dto.KakaoUserDto; import com.cakey.client.SocialType; +import com.cakey.exception.AuthKakaoException; import com.cakey.jwt.domain.UserRole; +import com.cakey.rescode.ErrorBaseCode; import feign.FeignException; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; @Service +@Slf4j @RequiredArgsConstructor public class KakaoSocialService { private final KakaoApiClient kakaoApiClient; @@ -23,12 +27,13 @@ public class KakaoSocialService { private String clientId; public KakaoUserDto getKakaoUserInfo(final String authorizationCode, final String redirectUri) { - String kakaoAccessToken; + final String kakaoAccessToken; try { // 인가 코드로 카카오 Access Token 받아오기 kakaoAccessToken = getOAuth2Authentication(authorizationCode, redirectUri); } catch (FeignException e) { - throw new RuntimeException("authentication code expired"); + log.error(e.getMessage(), e); + throw new AuthKakaoException(); } final String contentType = MediaType.APPLICATION_FORM_URLENCODED.toString(); diff --git a/cakey-auth/src/main/java/com/cakey/exception/AuthBaseException.java b/cakey-auth/src/main/java/com/cakey/exception/AuthBaseException.java new file mode 100644 index 0000000..ab52d01 --- /dev/null +++ b/cakey-auth/src/main/java/com/cakey/exception/AuthBaseException.java @@ -0,0 +1,9 @@ +package com.cakey.exception; + +import com.cakey.rescode.ErrorCode; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +public abstract class AuthBaseException extends CakeBaseException { } diff --git a/cakey-auth/src/main/java/com/cakey/exception/AuthKakaoException.java b/cakey-auth/src/main/java/com/cakey/exception/AuthKakaoException.java new file mode 100644 index 0000000..56b0429 --- /dev/null +++ b/cakey-auth/src/main/java/com/cakey/exception/AuthKakaoException.java @@ -0,0 +1,8 @@ +package com.cakey.exception; + +import com.cakey.rescode.ErrorCode; +import org.springframework.http.HttpStatus; + + +public class AuthKakaoException extends AuthBaseException { +}