diff --git a/src/main/kotlin/roomescape/auth/web/support/interceptors/AdminInterceptor.kt b/src/main/kotlin/roomescape/auth/web/support/interceptors/AdminInterceptor.kt index 2bd227f6..ed608e37 100644 --- a/src/main/kotlin/roomescape/auth/web/support/interceptors/AdminInterceptor.kt +++ b/src/main/kotlin/roomescape/auth/web/support/interceptors/AdminInterceptor.kt @@ -4,7 +4,6 @@ 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 @@ -18,7 +17,7 @@ import roomescape.auth.exception.AuthException import roomescape.auth.infrastructure.jwt.JwtUtils import roomescape.auth.web.support.AdminOnly import roomescape.auth.web.support.accessToken -import roomescape.common.dto.MDC_PRINCIPAL_ID_KEY +import roomescape.common.util.MdcPrincipalId private val log: KLogger = KotlinLogging.logger {} @@ -39,7 +38,7 @@ class AdminInterceptor( try { run { - val id: String = jwtUtils.extractSubject(token).also { MDC.put(MDC_PRINCIPAL_ID_KEY, it) } + val id: String = jwtUtils.extractSubject(token).also { MdcPrincipalId.set(it) } val type: AdminType = validateTypeAndGet(token, annotation.type) val permission: AdminPermissionLevel = validatePermissionAndGet(token, annotation.privilege) diff --git a/src/main/kotlin/roomescape/auth/web/support/interceptors/UserInterceptor.kt b/src/main/kotlin/roomescape/auth/web/support/interceptors/UserInterceptor.kt index ce02d644..4db11d08 100644 --- a/src/main/kotlin/roomescape/auth/web/support/interceptors/UserInterceptor.kt +++ b/src/main/kotlin/roomescape/auth/web/support/interceptors/UserInterceptor.kt @@ -4,7 +4,6 @@ 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 @@ -14,7 +13,7 @@ import roomescape.auth.exception.AuthException import roomescape.auth.infrastructure.jwt.JwtUtils import roomescape.auth.web.support.UserOnly import roomescape.auth.web.support.accessToken -import roomescape.common.dto.MDC_PRINCIPAL_ID_KEY +import roomescape.common.util.MdcPrincipalId private val log: KLogger = KotlinLogging.logger {} @@ -34,7 +33,7 @@ class UserInterceptor( val token: String? = request.accessToken() try { - val id: String = jwtUtils.extractSubject(token).also { MDC.put(MDC_PRINCIPAL_ID_KEY, it) } + val id: String = jwtUtils.extractSubject(token).also { MdcPrincipalId.set(it) } /** * CLAIM_ADMIN_TYPE_KEY 가 존재하면 관리자 토큰임 diff --git a/src/main/kotlin/roomescape/common/config/JpaConfig.kt b/src/main/kotlin/roomescape/common/config/JpaConfig.kt index 8944e26a..29a14094 100644 --- a/src/main/kotlin/roomescape/common/config/JpaConfig.kt +++ b/src/main/kotlin/roomescape/common/config/JpaConfig.kt @@ -1,11 +1,10 @@ package roomescape.common.config -import org.slf4j.MDC import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import org.springframework.data.domain.AuditorAware import org.springframework.data.jpa.repository.config.EnableJpaAuditing -import roomescape.common.dto.MDC_PRINCIPAL_ID_KEY +import roomescape.common.util.MdcPrincipalId import java.util.* @Configuration @@ -17,13 +16,5 @@ class JpaConfig { } class MdcAuditorAware : AuditorAware { - override fun getCurrentAuditor(): Optional { - val memberIdStr: String? = MDC.get(MDC_PRINCIPAL_ID_KEY) - - if (memberIdStr == null) { - return Optional.empty() - } else { - return Optional.of(memberIdStr.toLong()) - } - } + override fun getCurrentAuditor(): Optional = MdcPrincipalId.extractAsOptionalLongOrEmpty() } diff --git a/src/main/kotlin/roomescape/common/dto/CommonAuth.kt b/src/main/kotlin/roomescape/common/dto/CommonAuth.kt index af9b36f6..3d037d55 100644 --- a/src/main/kotlin/roomescape/common/dto/CommonAuth.kt +++ b/src/main/kotlin/roomescape/common/dto/CommonAuth.kt @@ -8,7 +8,6 @@ import roomescape.auth.web.LoginSuccessResponse import roomescape.auth.web.UserLoginSuccessResponse import roomescape.user.infrastructure.persistence.UserEntity -const val MDC_PRINCIPAL_ID_KEY: String = "principal_id" abstract class LoginCredentials { abstract val id: Long diff --git a/src/main/kotlin/roomescape/common/log/ApiLogMessageConverter.kt b/src/main/kotlin/roomescape/common/log/ApiLogMessageConverter.kt index 85e042be..8cf19eab 100644 --- a/src/main/kotlin/roomescape/common/log/ApiLogMessageConverter.kt +++ b/src/main/kotlin/roomescape/common/log/ApiLogMessageConverter.kt @@ -2,8 +2,7 @@ package roomescape.common.log import com.fasterxml.jackson.databind.ObjectMapper import jakarta.servlet.http.HttpServletRequest -import org.slf4j.MDC -import roomescape.common.dto.MDC_PRINCIPAL_ID_KEY +import roomescape.common.util.MdcPrincipalId enum class LogType { INCOMING_HTTP_REQUEST, @@ -34,7 +33,7 @@ class ApiLogMessageConverter( controllerPayload: Map, ): String { val payload: MutableMap = commonRequestPayload(LogType.CONTROLLER_INVOKED, request) - val memberId: Long? = MDC.get(MDC_PRINCIPAL_ID_KEY)?.toLong() + val memberId: Long? = MdcPrincipalId.extractAsLongOrNull() if (memberId != null) payload["principal_id"] = memberId else payload["principal_id"] = "NONE" payload.putAll(controllerPayload) @@ -48,7 +47,7 @@ class ApiLogMessageConverter( payload["endpoint"] = request.endpoint payload["status_code"] = request.httpStatus - MDC.get(MDC_PRINCIPAL_ID_KEY)?.toLongOrNull() + MdcPrincipalId.extractAsLongOrNull() ?.let { payload["principal_id"] = it } ?: run { payload["principal_id"] = "NONE" } diff --git a/src/main/kotlin/roomescape/common/util/MDCUtils.kt b/src/main/kotlin/roomescape/common/util/MDCUtils.kt new file mode 100644 index 00000000..b5e477bb --- /dev/null +++ b/src/main/kotlin/roomescape/common/util/MDCUtils.kt @@ -0,0 +1,27 @@ +package roomescape.common.util + +import org.slf4j.MDC +import java.util.Optional + +private const val MDC_PRINCIPAL_ID_KEY = "principal_id" + +object MdcPrincipalId { + + fun extractAsLongOrNull(): Long? { + return MDC.get(MDC_PRINCIPAL_ID_KEY)?.toLong() + } + + fun extractAsOptionalLongOrEmpty(): Optional { + return MDC.get(MDC_PRINCIPAL_ID_KEY)?.let { + Optional.of(it.toLong()) + } ?: Optional.empty() + } + + fun set(id: String) { + MDC.put(MDC_PRINCIPAL_ID_KEY, id) + } + + fun clear() { + MDC.remove(MDC_PRINCIPAL_ID_KEY) + } +}