From 9fe1a7b0b1808189f9fd3bde650451bc81b4c836 Mon Sep 17 00:00:00 2001 From: uwoobeat Date: Sun, 11 Feb 2024 03:17:16 +0900 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=EB=A9=A4=EB=B2=84=20=EC=9C=A0?= =?UTF-8?q?=ED=8B=B8=EB=A6=AC=ED=8B=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gdsc/global/exception/ErrorCode.java | 6 ++-- .../gdsc/global/util/MemberUtil.java | 36 +++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/gdschongik/gdsc/global/util/MemberUtil.java diff --git a/src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java b/src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java index 4bf8434d3..bf6defaa2 100644 --- a/src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java +++ b/src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java @@ -9,16 +9,18 @@ public enum ErrorCode { INTERNAL_SERVER_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "서버 에러입니다."), - // Jwt + // Auth INVALID_JWT_TOKEN(HttpStatus.UNAUTHORIZED, "유효하지 않은 JWT 토큰입니다."), EXPIRED_JWT_TOKEN(HttpStatus.UNAUTHORIZED, "만료된 JWT 토큰입니다."), + AUTH_NOT_FOUND(HttpStatus.INTERNAL_SERVER_ERROR, "시큐리티 인증 정보를 찾을 수 없습니다."), // Parameter INVALID_QUERY_PARAMETER(HttpStatus.BAD_REQUEST, "잘못된 쿼리 파라미터입니다."), // Member MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 회원입니다."), - MEMBER_DELETED(HttpStatus.CONFLICT, "탈퇴한 회원입니다."); + MEMBER_DELETED(HttpStatus.CONFLICT, "탈퇴한 회원입니다."), + ; private final HttpStatus status; private final String message; diff --git a/src/main/java/com/gdschongik/gdsc/global/util/MemberUtil.java b/src/main/java/com/gdschongik/gdsc/global/util/MemberUtil.java new file mode 100644 index 000000000..07867dab3 --- /dev/null +++ b/src/main/java/com/gdschongik/gdsc/global/util/MemberUtil.java @@ -0,0 +1,36 @@ +package com.gdschongik.gdsc.global.util; + +import com.gdschongik.gdsc.domain.member.dao.MemberRepository; +import com.gdschongik.gdsc.domain.member.domain.Member; +import com.gdschongik.gdsc.global.exception.CustomException; +import com.gdschongik.gdsc.global.exception.ErrorCode; +import lombok.RequiredArgsConstructor; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class MemberUtil { + + private final MemberRepository memberRepository; + + private Long getCurrentMemberIdFromSecurityContext() { + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + try { + return Long.parseLong(authentication.getName()); + } catch (Exception e) { + throw new CustomException(ErrorCode.AUTH_NOT_FOUND); + } + } + + public Long getCurrentMemberId() { + return getCurrentMemberIdFromSecurityContext(); + } + + public Member getCurrentMember() { + return memberRepository + .findById(getCurrentMemberIdFromSecurityContext()) + .orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND)); + } +} From 92a9b5b457aeefba32d142735772c8cae2688a54 Mon Sep 17 00:00:00 2001 From: uwoobeat Date: Sun, 11 Feb 2024 13:00:11 +0900 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20=EC=98=88=EC=99=B8=20=EC=BC=80?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EB=B6=84=EB=A6=AC=20=EB=B0=8F=20=EB=B6=88?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gdsc/global/exception/ErrorCode.java | 3 ++- .../gdschongik/gdsc/global/util/MemberUtil.java | 17 +++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java b/src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java index bf6defaa2..582bdf4af 100644 --- a/src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java +++ b/src/main/java/com/gdschongik/gdsc/global/exception/ErrorCode.java @@ -12,7 +12,8 @@ public enum ErrorCode { // Auth INVALID_JWT_TOKEN(HttpStatus.UNAUTHORIZED, "유효하지 않은 JWT 토큰입니다."), EXPIRED_JWT_TOKEN(HttpStatus.UNAUTHORIZED, "만료된 JWT 토큰입니다."), - AUTH_NOT_FOUND(HttpStatus.INTERNAL_SERVER_ERROR, "시큐리티 인증 정보를 찾을 수 없습니다."), + AUTH_NOT_EXIST(HttpStatus.INTERNAL_SERVER_ERROR, "시큐리티 인증 정보가 존재하지 않습니다."), + AUTH_NOT_PARSABLE(HttpStatus.INTERNAL_SERVER_ERROR, "시큐리티 인증 정보 파싱에 실패했습니다."), // Parameter INVALID_QUERY_PARAMETER(HttpStatus.BAD_REQUEST, "잘못된 쿼리 파라미터입니다."), diff --git a/src/main/java/com/gdschongik/gdsc/global/util/MemberUtil.java b/src/main/java/com/gdschongik/gdsc/global/util/MemberUtil.java index 07867dab3..63315d461 100644 --- a/src/main/java/com/gdschongik/gdsc/global/util/MemberUtil.java +++ b/src/main/java/com/gdschongik/gdsc/global/util/MemberUtil.java @@ -15,22 +15,27 @@ public class MemberUtil { private final MemberRepository memberRepository; - private Long getCurrentMemberIdFromSecurityContext() { + public Long getCurrentMemberId() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + + validateAuthenticationNotNull(authentication); + try { return Long.parseLong(authentication.getName()); - } catch (Exception e) { - throw new CustomException(ErrorCode.AUTH_NOT_FOUND); + } catch (NumberFormatException e) { + throw new CustomException(ErrorCode.AUTH_NOT_PARSABLE); } } - public Long getCurrentMemberId() { - return getCurrentMemberIdFromSecurityContext(); + private void validateAuthenticationNotNull(Authentication authentication) { + if (authentication == null) { + throw new CustomException(ErrorCode.AUTH_NOT_EXIST); + } } public Member getCurrentMember() { return memberRepository - .findById(getCurrentMemberIdFromSecurityContext()) + .findById(getCurrentMemberId()) .orElseThrow(() -> new CustomException(ErrorCode.MEMBER_NOT_FOUND)); } }