diff --git a/src/main/kotlin/roomescape/auth/web/support/AuthInterceptor.kt b/src/main/kotlin/roomescape/auth/web/support/AuthInterceptor.kt index c8b90bcc..9b7dadb8 100644 --- a/src/main/kotlin/roomescape/auth/web/support/AuthInterceptor.kt +++ b/src/main/kotlin/roomescape/auth/web/support/AuthInterceptor.kt @@ -1,7 +1,10 @@ package roomescape.auth.web.support +import io.github.oshai.kotlinlogging.KLogger +import io.github.oshai.kotlinlogging.KotlinLogging import jakarta.servlet.http.HttpServletRequest import jakarta.servlet.http.HttpServletResponse +import org.slf4j.MDC import org.springframework.stereotype.Component import org.springframework.web.method.HandlerMethod import org.springframework.web.servlet.HandlerInterceptor @@ -11,6 +14,8 @@ import roomescape.auth.infrastructure.jwt.JwtHandler import roomescape.member.business.MemberService import roomescape.member.infrastructure.persistence.MemberEntity +private val log: KLogger = KotlinLogging.logger {} + @Component class AuthInterceptor( private val memberService: MemberService, @@ -28,23 +33,29 @@ class AuthInterceptor( return true } - val member: MemberEntity = findMember(request) + val accessToken: String? = request.accessToken() + log.info { "[AuthInterceptor] 인증 시작. accessToken=${accessToken}" } + val member: MemberEntity = findMember(accessToken) if (admin != null && !member.isAdmin()) { + log.info { "[AuthInterceptor] 관리자 인증 실패. memberId=${member.id}, role=${member.role}" } throw AuthException(AuthErrorCode.ACCESS_DENIED) } + MDC.put("member_id", "${member.id}") + log.info { "[AuthInterceptor] 인증 완료. memberId=${member.id}, role=${member.role}" } return true } - private fun findMember(request: HttpServletRequest): MemberEntity { + private fun findMember(accessToken: String?): MemberEntity { try { - val token: String? = request.accessToken() - val memberId: Long = jwtHandler.getMemberIdFromToken(token) - + val memberId = jwtHandler.getMemberIdFromToken(accessToken) return memberService.findById(memberId) + .also { MDC.put("member_id", "$memberId") } } catch (e: Exception) { - throw e + log.info { "[AuthInterceptor] 회원 조회 실패. accessToken = ${accessToken}" } + val errorCode = AuthErrorCode.MEMBER_NOT_FOUND + throw AuthException(errorCode, e.message ?: errorCode.message) } } } diff --git a/src/main/kotlin/roomescape/auth/web/support/MemberIdResolver.kt b/src/main/kotlin/roomescape/auth/web/support/MemberIdResolver.kt index 49cbdaca..2731f5d9 100644 --- a/src/main/kotlin/roomescape/auth/web/support/MemberIdResolver.kt +++ b/src/main/kotlin/roomescape/auth/web/support/MemberIdResolver.kt @@ -1,14 +1,21 @@ package roomescape.auth.web.support +import io.github.oshai.kotlinlogging.KLogger +import io.github.oshai.kotlinlogging.KotlinLogging import jakarta.servlet.http.HttpServletRequest +import org.slf4j.MDC import org.springframework.core.MethodParameter import org.springframework.stereotype.Component import org.springframework.web.bind.support.WebDataBinderFactory import org.springframework.web.context.request.NativeWebRequest import org.springframework.web.method.support.HandlerMethodArgumentResolver import org.springframework.web.method.support.ModelAndViewContainer +import roomescape.auth.exception.AuthErrorCode +import roomescape.auth.exception.AuthException import roomescape.auth.infrastructure.jwt.JwtHandler +private val log: KLogger = KotlinLogging.logger {} + @Component class MemberIdResolver( private val jwtHandler: JwtHandler @@ -27,6 +34,13 @@ class MemberIdResolver( val request: HttpServletRequest = webRequest.nativeRequest as HttpServletRequest val token: String? = request.accessToken() - return jwtHandler.getMemberIdFromToken(token) + try { + return jwtHandler.getMemberIdFromToken(token) + .also { MDC.put("member_id", "$it") } + } catch (e: Exception) { + log.info { "[MemberIdResolver] 회원 조회 실패. message=${e.message}" } + val errorCode = AuthErrorCode.MEMBER_NOT_FOUND + throw AuthException(errorCode, e.message ?: errorCode.message) + } } }