From 810746856232148fcb50311919cce5a3c85497d0 Mon Sep 17 00:00:00 2001 From: beaniejoy Date: Thu, 13 Apr 2023 01:59:51 +0900 Subject: [PATCH 1/5] =?UTF-8?q?[#43]=20feat:=20logging=20filter=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=20=EC=A7=84=ED=96=89=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - LoggingFilter 초기 설정(리팩토링 필요) - logback-spring.xml 설정 - security filter order 설정값 지정 --- .../dongnecafe/filter/LoggingFilter.kt | 32 +++++++++++++++++++ .../src/main/resources/application.yml | 3 ++ .../src/main/resources/logback-spring.xml | 28 ++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/filter/LoggingFilter.kt create mode 100644 dongne-service-api/src/main/resources/logback-spring.xml diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/filter/LoggingFilter.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/filter/LoggingFilter.kt new file mode 100644 index 0000000..a53a8bc --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/filter/LoggingFilter.kt @@ -0,0 +1,32 @@ +package io.beaniejoy.dongnecafe.filter + +import mu.KotlinLogging +import org.slf4j.MDC +import org.springframework.core.annotation.Order +import org.springframework.stereotype.Component +import org.springframework.web.filter.OncePerRequestFilter +import java.util.UUID +import javax.servlet.FilterChain +import javax.servlet.http.HttpServletRequest +import javax.servlet.http.HttpServletResponse + +// TODO: 리팩토링 필요(logback-spring.xml 같이) +@Component +@Order(1) +class LoggingFilter: OncePerRequestFilter() { + private val log = KotlinLogging.logger {} + + override fun doFilterInternal( + request: HttpServletRequest, + response: HttpServletResponse, + filterChain: FilterChain, + ) { + val requestId = UUID.randomUUID().toString().substring(0, 8) + MDC.put("request_id", requestId) + + log.info{ "request_id = $requestId" } + filterChain.doFilter(request, response) + + MDC.remove("request_id") + } +} \ No newline at end of file diff --git a/dongne-service-api/src/main/resources/application.yml b/dongne-service-api/src/main/resources/application.yml index 55d9795..bae37d9 100644 --- a/dongne-service-api/src/main/resources/application.yml +++ b/dongne-service-api/src/main/resources/application.yml @@ -14,6 +14,9 @@ spring: devtools: livereload: enabled: false # no use devtools' LiveReload Server + security: + filter: + order: 10 logging: level: diff --git a/dongne-service-api/src/main/resources/logback-spring.xml b/dongne-service-api/src/main/resources/logback-spring.xml new file mode 100644 index 0000000..5de84ae --- /dev/null +++ b/dongne-service-api/src/main/resources/logback-spring.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + ${LOG_PATTERN} + + + + + + + + + + + + + + + + + \ No newline at end of file From a108cdd466f8f84b82abf2c27dcb37aaf8740dcd Mon Sep 17 00:00:00 2001 From: beaniejoy Date: Fri, 14 Apr 2023 02:04:48 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[#43]=20feat:=20request,=20response=20?= =?UTF-8?q?=EB=82=B4=EC=9A=A9=20logging=20=EC=A0=81=EC=9A=A9=ED=95=B4?= =?UTF-8?q?=EB=B3=B4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - request, response 내용 로깅을 위한 filter 적용 - request, response 관련 캐싱 기능 적용 - json converting을 위한 Gson library 적용 --- build.gradle.kts | 2 + .../dongnecafe/filter/LoggingFilter.kt | 32 -------- .../infra/RequestResponseLoggingFilter.kt | 80 +++++++++++++++++++ .../src/main/resources/logback-spring.xml | 9 ++- 4 files changed, 87 insertions(+), 36 deletions(-) delete mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/filter/LoggingFilter.kt create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/RequestResponseLoggingFilter.kt diff --git a/build.gradle.kts b/build.gradle.kts index 64fb392..012c005 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -67,6 +67,8 @@ subprojects { // Logging implementation("io.github.microutils:kotlin-logging:${Version.Deps.KOTLIN_LOGGING}") + implementation("com.google.code.gson:gson") + // Test testImplementation("org.springframework.boot:spring-boot-starter-test") diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/filter/LoggingFilter.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/filter/LoggingFilter.kt deleted file mode 100644 index a53a8bc..0000000 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/filter/LoggingFilter.kt +++ /dev/null @@ -1,32 +0,0 @@ -package io.beaniejoy.dongnecafe.filter - -import mu.KotlinLogging -import org.slf4j.MDC -import org.springframework.core.annotation.Order -import org.springframework.stereotype.Component -import org.springframework.web.filter.OncePerRequestFilter -import java.util.UUID -import javax.servlet.FilterChain -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse - -// TODO: 리팩토링 필요(logback-spring.xml 같이) -@Component -@Order(1) -class LoggingFilter: OncePerRequestFilter() { - private val log = KotlinLogging.logger {} - - override fun doFilterInternal( - request: HttpServletRequest, - response: HttpServletResponse, - filterChain: FilterChain, - ) { - val requestId = UUID.randomUUID().toString().substring(0, 8) - MDC.put("request_id", requestId) - - log.info{ "request_id = $requestId" } - filterChain.doFilter(request, response) - - MDC.remove("request_id") - } -} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/RequestResponseLoggingFilter.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/RequestResponseLoggingFilter.kt new file mode 100644 index 0000000..3c8954f --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/RequestResponseLoggingFilter.kt @@ -0,0 +1,80 @@ +package io.beaniejoy.dongnecafe.infra + +import com.google.gson.Gson +import mu.KotlinLogging +import org.slf4j.MDC +import org.springframework.core.Ordered +import org.springframework.core.annotation.Order +import org.springframework.stereotype.Component +import org.springframework.web.filter.OncePerRequestFilter +import org.springframework.web.util.ContentCachingRequestWrapper +import org.springframework.web.util.ContentCachingResponseWrapper +import java.util.UUID +import javax.servlet.FilterChain +import javax.servlet.http.HttpServletRequest +import javax.servlet.http.HttpServletResponse + +// TODO: 리팩토링 필요(logback-spring.xml 같이) +@Component +@Order(Ordered.HIGHEST_PRECEDENCE) +class RequestResponseLoggingFilter : OncePerRequestFilter() { + private val log = KotlinLogging.logger {} + + companion object { + const val REQUEST_ID = "request_id" + } + + override fun doFilterInternal( + request: HttpServletRequest, + response: HttpServletResponse, + filterChain: FilterChain, + ) { + val cachingRequestWrapper = ContentCachingRequestWrapper(request) + val cachingResponseWrapper = ContentCachingResponseWrapper(response) + + val requestId = UUID.randomUUID().toString().substring(0, 8) + + MDC.put(REQUEST_ID, requestId) + + val startTime = System.currentTimeMillis() + filterChain.doFilter(cachingRequestWrapper, cachingResponseWrapper) + val end = System.currentTimeMillis() + + // TODO: GET에 대해서 request body가 안찍힘 + log.info { """ + | + |[REQUEST] ${request.method} ${request.requestURI} ${response.status} (${(end - startTime) / 1000.0}) + |HEADERS: ${getRequestHeaders(request)} + |REQUEST_PARAM: ${getRequestParams(request)} + |REQUEST_BODY: ${getRequestBody(cachingRequestWrapper)} + |RESPONSE_BODY: ${getResponseBody(cachingResponseWrapper)} + """.trimMargin() } + + cachingResponseWrapper.copyBodyToResponse() + + MDC.remove(REQUEST_ID) + } + + private fun getRequestHeaders(request: HttpServletRequest): String { + return Gson().toJson( + mutableMapOf().apply { + request.headerNames.toList().forEach { this[it] = request.getHeader(it) } + } + ) + } + + private fun getRequestParams(request: HttpServletRequest): String { + return request.parameterMap.mapValues { + it.value.joinToString(",") + }.entries.joinToString("&") + } + + private fun getRequestBody(requestWrapper: ContentCachingRequestWrapper): String { + return requestWrapper.contentAsByteArray.toString(Charsets.UTF_8) + } + + // TODO: logging response body maximum size 고려 + private fun getResponseBody(responseWrapper: ContentCachingResponseWrapper): String { + return responseWrapper.contentAsByteArray.toString(Charsets.UTF_8) + } +} \ No newline at end of file diff --git a/dongne-service-api/src/main/resources/logback-spring.xml b/dongne-service-api/src/main/resources/logback-spring.xml index 5de84ae..3edf5ab 100644 --- a/dongne-service-api/src/main/resources/logback-spring.xml +++ b/dongne-service-api/src/main/resources/logback-spring.xml @@ -3,10 +3,10 @@ - + - - + + ${LOG_PATTERN} @@ -14,9 +14,10 @@ - + + From 743fe11dc6903e2581a52aa4c429d469270319b0 Mon Sep 17 00:00:00 2001 From: beaniejoy Date: Fri, 14 Apr 2023 20:19:28 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[#43]=20modify:=20Logging=20Filter=EC=97=90?= =?UTF-8?q?=20=EB=8C=80=ED=95=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - utils 성격의 클래스 따로 패키지화 - LoggingFilter의 LogMessage 도메인 따로 구분 --- .../common/config/SecurityConfig.kt | 2 +- .../dongnecafe/controller/AuthController.kt | 2 +- .../common/config/AuditingConfig.kt | 2 +- .../dongnecafe/infra/HttpLogMessage.kt | 54 +++++++++++++++++++ .../infra/RequestResponseLoggingFilter.kt | 51 +++++------------- .../config/JwtAuthenticationConfigurer.kt | 2 +- .../filter/JwtAuthenticationFilter.kt | 2 +- .../utils/logging/HttpServletExtensions.kt | 32 +++++++++++ .../dongnecafe/utils/logging/LoggingUtils.kt | 7 +++ .../utils => utils/security}/JwtTokenUtils.kt | 2 +- .../security}/SecurityExtensions.kt | 2 +- .../common/config/SecurityConfig.kt | 2 +- 12 files changed, 115 insertions(+), 45 deletions(-) create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/HttpLogMessage.kt create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/HttpServletExtensions.kt create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/LoggingUtils.kt rename dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/{security/utils => utils/security}/JwtTokenUtils.kt (98%) rename dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/{security/utils => utils/security}/SecurityExtensions.kt (91%) diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt index 378ca2b..51b459f 100644 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt @@ -1,6 +1,6 @@ package io.beaniejoy.dongnecafe.common.config -import io.beaniejoy.dongnecafe.security.utils.JwtTokenUtils +import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils import io.beaniejoy.dongnecafe.security.config.JwtAuthenticationConfigurer import io.beaniejoy.dongnecafe.security.handler.CustomAccessDeniedHandler import io.beaniejoy.dongnecafe.security.handler.CustomAuthenticationEntryPoint diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/AuthController.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/AuthController.kt index 18e6789..6c2f96d 100644 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/AuthController.kt +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/controller/AuthController.kt @@ -1,7 +1,7 @@ package io.beaniejoy.dongnecafe.controller import io.beaniejoy.dongnecafe.common.response.ApplicationResponse -import io.beaniejoy.dongnecafe.security.utils.JwtTokenUtils +import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils import io.beaniejoy.dongnecafe.domain.member.model.request.SignInRequest import io.beaniejoy.dongnecafe.model.TokenResponse import io.beaniejoy.dongnecafe.service.AuthService diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt index 3174200..2545e09 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/AuditingConfig.kt @@ -1,6 +1,6 @@ package io.beaniejoy.dongnecafe.common.config -import io.beaniejoy.dongnecafe.security.utils.getAuthPrincipal +import io.beaniejoy.dongnecafe.utils.security.getAuthPrincipal import mu.KLogging import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/HttpLogMessage.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/HttpLogMessage.kt new file mode 100644 index 0000000..d5415e4 --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/HttpLogMessage.kt @@ -0,0 +1,54 @@ +package io.beaniejoy.dongnecafe.infra + +import io.beaniejoy.dongnecafe.utils.logging.getRequestBody +import io.beaniejoy.dongnecafe.utils.logging.getRequestHeaders +import io.beaniejoy.dongnecafe.utils.logging.getRequestParams +import io.beaniejoy.dongnecafe.utils.logging.getResponseBody +import org.springframework.http.HttpStatus +import org.springframework.web.util.ContentCachingRequestWrapper +import org.springframework.web.util.ContentCachingResponseWrapper + +// TODO: clientIP에 대해서 고민해보기 +data class HttpLogMessage( + val httpMethod: String, + val requestUri: String, + val httpStatus: HttpStatus, + val clientIp: String, + val elapsedTime: Double, + val headers: String?, + val requestParam: String?, + val requestBody: String?, + val responseBody: String?, +) { + companion object { + fun createInstance( + requestWrapper: ContentCachingRequestWrapper, + responseWrapper: ContentCachingResponseWrapper, + elapsedTime: Double + ): HttpLogMessage { + return HttpLogMessage( + httpMethod = requestWrapper.method, + requestUri = requestWrapper.requestURI, + httpStatus = HttpStatus.valueOf(responseWrapper.status), + clientIp = requestWrapper.remoteAddr, + elapsedTime = elapsedTime, + headers = requestWrapper.getRequestHeaders(), + requestParam = requestWrapper.getRequestParams(), + requestBody = requestWrapper.getRequestBody(), + responseBody = responseWrapper.getResponseBody(), + ) + } + } + + fun toPrettierLog(): String { + return """ + | + |[REQUEST] ${this.httpMethod} ${this.requestUri} ${this.httpStatus} (${this.elapsedTime}) + |CLIENT_IP: ${this.clientIp} + |HEADERS: ${this.headers} + |REQUEST_PARAM: ${this.requestParam} + |REQUEST_BODY: ${this.requestBody} + |RESPONSE_BODY: ${this.responseBody} + """.trimMargin() + } +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/RequestResponseLoggingFilter.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/RequestResponseLoggingFilter.kt index 3c8954f..e83445c 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/RequestResponseLoggingFilter.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/RequestResponseLoggingFilter.kt @@ -1,6 +1,5 @@ package io.beaniejoy.dongnecafe.infra -import com.google.gson.Gson import mu.KotlinLogging import org.slf4j.MDC import org.springframework.core.Ordered @@ -9,12 +8,11 @@ import org.springframework.stereotype.Component import org.springframework.web.filter.OncePerRequestFilter import org.springframework.web.util.ContentCachingRequestWrapper import org.springframework.web.util.ContentCachingResponseWrapper -import java.util.UUID +import java.util.* import javax.servlet.FilterChain import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletResponse -// TODO: 리팩토링 필요(logback-spring.xml 같이) @Component @Order(Ordered.HIGHEST_PRECEDENCE) class RequestResponseLoggingFilter : OncePerRequestFilter() { @@ -40,41 +38,20 @@ class RequestResponseLoggingFilter : OncePerRequestFilter() { filterChain.doFilter(cachingRequestWrapper, cachingResponseWrapper) val end = System.currentTimeMillis() - // TODO: GET에 대해서 request body가 안찍힘 - log.info { """ - | - |[REQUEST] ${request.method} ${request.requestURI} ${response.status} (${(end - startTime) / 1000.0}) - |HEADERS: ${getRequestHeaders(request)} - |REQUEST_PARAM: ${getRequestParams(request)} - |REQUEST_BODY: ${getRequestBody(cachingRequestWrapper)} - |RESPONSE_BODY: ${getResponseBody(cachingResponseWrapper)} - """.trimMargin() } - - cachingResponseWrapper.copyBodyToResponse() - - MDC.remove(REQUEST_ID) - } - - private fun getRequestHeaders(request: HttpServletRequest): String { - return Gson().toJson( - mutableMapOf().apply { - request.headerNames.toList().forEach { this[it] = request.getHeader(it) } + try { + log.info { + HttpLogMessage.createInstance( + requestWrapper = cachingRequestWrapper, + responseWrapper = cachingResponseWrapper, + elapsedTime = (end - startTime) / 1000.0 + ).toPrettierLog() } - ) - } - private fun getRequestParams(request: HttpServletRequest): String { - return request.parameterMap.mapValues { - it.value.joinToString(",") - }.entries.joinToString("&") - } - - private fun getRequestBody(requestWrapper: ContentCachingRequestWrapper): String { - return requestWrapper.contentAsByteArray.toString(Charsets.UTF_8) - } - - // TODO: logging response body maximum size 고려 - private fun getResponseBody(responseWrapper: ContentCachingResponseWrapper): String { - return responseWrapper.contentAsByteArray.toString(Charsets.UTF_8) + cachingResponseWrapper.copyBodyToResponse() + } catch (e: Exception) { + log.error(e) { "[RequestResponseLoggingFilter] logging 실패" } + } finally { + MDC.remove(REQUEST_ID) + } } } \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/config/JwtAuthenticationConfigurer.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/config/JwtAuthenticationConfigurer.kt index 00e6bb5..524b744 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/config/JwtAuthenticationConfigurer.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/config/JwtAuthenticationConfigurer.kt @@ -1,7 +1,7 @@ package io.beaniejoy.dongnecafe.security.config import io.beaniejoy.dongnecafe.security.filter.JwtAuthenticationFilter -import io.beaniejoy.dongnecafe.security.utils.JwtTokenUtils +import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils import org.springframework.security.config.annotation.SecurityConfigurerAdapter import org.springframework.security.config.annotation.web.builders.HttpSecurity import org.springframework.security.web.DefaultSecurityFilterChain diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt index 5df9a40..6adabd5 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt @@ -1,6 +1,6 @@ package io.beaniejoy.dongnecafe.security.filter -import io.beaniejoy.dongnecafe.security.utils.JwtTokenUtils +import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.BEARER import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.WHITESPACE import mu.KotlinLogging diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/HttpServletExtensions.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/HttpServletExtensions.kt new file mode 100644 index 0000000..121ad71 --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/HttpServletExtensions.kt @@ -0,0 +1,32 @@ +package io.beaniejoy.dongnecafe.utils.logging + +import com.google.gson.Gson +import org.springframework.web.util.ContentCachingRequestWrapper +import org.springframework.web.util.ContentCachingResponseWrapper +import javax.servlet.http.HttpServletRequest + +fun HttpServletRequest.getRequestHeaders(): String? { + val request = this + return Gson().toJson( + mutableMapOf().apply { + request.headerNames.toList().forEach { + this[it] = request.getHeader(it) + } + } + ) +} + +fun HttpServletRequest.getRequestParams(): String { + return this.parameterMap.mapValues { + it.value.joinToString(",") + }.entries.joinToString("&") +} + +fun ContentCachingRequestWrapper.getRequestBody(): String { + return this.contentAsByteArray.toString(Charsets.UTF_8) +} + +// TODO: logging response body maximum size 고려 +fun ContentCachingResponseWrapper.getResponseBody(): String { + return this.contentAsByteArray.toString(Charsets.UTF_8) +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/LoggingUtils.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/LoggingUtils.kt new file mode 100644 index 0000000..2e8b3c2 --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/LoggingUtils.kt @@ -0,0 +1,7 @@ +package io.beaniejoy.dongnecafe.utils.logging + +class LoggingUtils { + companion object { + + } +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/utils/JwtTokenUtils.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/JwtTokenUtils.kt similarity index 98% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/utils/JwtTokenUtils.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/JwtTokenUtils.kt index fb39ae1..21e53bf 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/utils/JwtTokenUtils.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/JwtTokenUtils.kt @@ -1,4 +1,4 @@ -package io.beaniejoy.dongnecafe.security.utils +package io.beaniejoy.dongnecafe.utils.security import io.beaniejoy.dongnecafe.security.SecurityUser import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.JWT_AUTHORITIES_KEY diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/utils/SecurityExtensions.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/SecurityExtensions.kt similarity index 91% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/utils/SecurityExtensions.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/SecurityExtensions.kt index 008c912..74250ab 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/utils/SecurityExtensions.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/SecurityExtensions.kt @@ -1,4 +1,4 @@ -package io.beaniejoy.dongnecafe.security.utils +package io.beaniejoy.dongnecafe.utils.security import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.ANONYMOUS_USER import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.ROLE_ANONYMOUS diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt index 12ae6fc..8c831d8 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt @@ -1,7 +1,7 @@ package io.beaniejoy.dongnecafe.common.config import io.beaniejoy.dongnecafe.security.config.JwtAuthenticationConfigurer -import io.beaniejoy.dongnecafe.security.utils.JwtTokenUtils +import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils import io.beaniejoy.dongnecafe.security.handler.CustomAccessDeniedHandler import io.beaniejoy.dongnecafe.security.handler.CustomAuthenticationEntryPoint import org.springframework.beans.factory.annotation.Autowired From 5d516c95b602b9dc4f47daf412274fa18524339c Mon Sep 17 00:00:00 2001 From: beaniejoy Date: Sat, 15 Apr 2023 21:20:08 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[#43]=20feat:=20client=20ip=20=EC=B6=94?= =?UTF-8?q?=EC=B6=9C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - client ip 후보군 enum 생성 - security, logging에 대한 패키지화(infra) --- .../dongnecafe/common/config/SecurityConfig.kt | 6 +++--- .../security/ApiAuthenticationProvider.kt | 1 + .../security/UserDetailsServiceImpl.kt | 1 + .../infra/{ => logging}/HttpLogMessage.kt | 9 +++------ .../ReqResLoggingFilter.kt} | 10 +++++----- .../infra/logging/constant/HttpClientIp.kt | 17 +++++++++++++++++ .../{ => infra}/security/SecurityUser.kt | 2 +- .../config/JwtAuthenticationConfigurer.kt | 4 ++-- .../security/constant/SecurityConstant.kt | 2 +- .../security/filter/JwtAuthenticationFilter.kt | 6 +++--- .../handler/CustomAccessDeniedHandler.kt | 2 +- .../handler/CustomAuthenticationEntryPoint.kt | 2 +- .../utils/logging/HttpServletExtensions.kt | 13 +++++++++++++ .../dongnecafe/utils/logging/LoggingUtils.kt | 7 ------- .../dongnecafe/utils/security/JwtTokenUtils.kt | 4 ++-- .../utils/security/SecurityExtensions.kt | 4 ++-- .../dongnecafe/common/config/SecurityConfig.kt | 6 +++--- 17 files changed, 59 insertions(+), 37 deletions(-) rename dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/{ => logging}/HttpLogMessage.kt (83%) rename dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/{RequestResponseLoggingFilter.kt => logging/ReqResLoggingFilter.kt} (87%) create mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/constant/HttpClientIp.kt rename dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/{ => infra}/security/SecurityUser.kt (87%) rename dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/{ => infra}/security/config/JwtAuthenticationConfigurer.kt (87%) rename dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/{ => infra}/security/constant/SecurityConstant.kt (80%) rename dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/{ => infra}/security/filter/JwtAuthenticationFilter.kt (89%) rename dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/{ => infra}/security/handler/CustomAccessDeniedHandler.kt (93%) rename dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/{ => infra}/security/handler/CustomAuthenticationEntryPoint.kt (93%) delete mode 100644 dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/LoggingUtils.kt diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt index 51b459f..cb6feba 100644 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt @@ -1,9 +1,9 @@ package io.beaniejoy.dongnecafe.common.config import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils -import io.beaniejoy.dongnecafe.security.config.JwtAuthenticationConfigurer -import io.beaniejoy.dongnecafe.security.handler.CustomAccessDeniedHandler -import io.beaniejoy.dongnecafe.security.handler.CustomAuthenticationEntryPoint +import io.beaniejoy.dongnecafe.infra.security.config.JwtAuthenticationConfigurer +import io.beaniejoy.dongnecafe.infra.security.handler.CustomAccessDeniedHandler +import io.beaniejoy.dongnecafe.infra.security.handler.CustomAuthenticationEntryPoint import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.security.servlet.PathRequest import org.springframework.context.annotation.Bean diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/ApiAuthenticationProvider.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/ApiAuthenticationProvider.kt index 29307ab..9ba37e9 100644 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/ApiAuthenticationProvider.kt +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/ApiAuthenticationProvider.kt @@ -1,6 +1,7 @@ package io.beaniejoy.dongnecafe.security import io.beaniejoy.dongnecafe.common.error.constant.ErrorCode +import io.beaniejoy.dongnecafe.infra.security.SecurityUser import mu.KLogging import org.springframework.security.authentication.AuthenticationProvider import org.springframework.security.authentication.BadCredentialsException diff --git a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/UserDetailsServiceImpl.kt b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/UserDetailsServiceImpl.kt index 8b6d771..a349884 100644 --- a/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/UserDetailsServiceImpl.kt +++ b/dongne-account-api/src/main/kotlin/io/beaniejoy/dongnecafe/security/UserDetailsServiceImpl.kt @@ -4,6 +4,7 @@ import io.beaniejoy.dongnecafe.common.error.constant.ErrorCode import io.beaniejoy.dongnecafe.common.error.exception.BusinessException import io.beaniejoy.dongnecafe.domain.member.entity.Member import io.beaniejoy.dongnecafe.domain.member.repository.MemberRepository +import io.beaniejoy.dongnecafe.infra.security.SecurityUser import mu.KLogging import org.springframework.security.core.authority.SimpleGrantedAuthority import org.springframework.security.core.userdetails.UserDetailsService diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/HttpLogMessage.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/HttpLogMessage.kt similarity index 83% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/HttpLogMessage.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/HttpLogMessage.kt index d5415e4..b6c9269 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/HttpLogMessage.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/HttpLogMessage.kt @@ -1,9 +1,6 @@ -package io.beaniejoy.dongnecafe.infra +package io.beaniejoy.dongnecafe.infra.logging -import io.beaniejoy.dongnecafe.utils.logging.getRequestBody -import io.beaniejoy.dongnecafe.utils.logging.getRequestHeaders -import io.beaniejoy.dongnecafe.utils.logging.getRequestParams -import io.beaniejoy.dongnecafe.utils.logging.getResponseBody +import io.beaniejoy.dongnecafe.utils.logging.* import org.springframework.http.HttpStatus import org.springframework.web.util.ContentCachingRequestWrapper import org.springframework.web.util.ContentCachingResponseWrapper @@ -30,7 +27,7 @@ data class HttpLogMessage( httpMethod = requestWrapper.method, requestUri = requestWrapper.requestURI, httpStatus = HttpStatus.valueOf(responseWrapper.status), - clientIp = requestWrapper.remoteAddr, + clientIp = requestWrapper.getClientIp(), elapsedTime = elapsedTime, headers = requestWrapper.getRequestHeaders(), requestParam = requestWrapper.getRequestParams(), diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/RequestResponseLoggingFilter.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/ReqResLoggingFilter.kt similarity index 87% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/RequestResponseLoggingFilter.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/ReqResLoggingFilter.kt index e83445c..67fddcc 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/RequestResponseLoggingFilter.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/ReqResLoggingFilter.kt @@ -1,4 +1,4 @@ -package io.beaniejoy.dongnecafe.infra +package io.beaniejoy.dongnecafe.infra.logging import mu.KotlinLogging import org.slf4j.MDC @@ -15,7 +15,7 @@ import javax.servlet.http.HttpServletResponse @Component @Order(Ordered.HIGHEST_PRECEDENCE) -class RequestResponseLoggingFilter : OncePerRequestFilter() { +class ReqResLoggingFilter : OncePerRequestFilter() { private val log = KotlinLogging.logger {} companion object { @@ -49,9 +49,9 @@ class RequestResponseLoggingFilter : OncePerRequestFilter() { cachingResponseWrapper.copyBodyToResponse() } catch (e: Exception) { - log.error(e) { "[RequestResponseLoggingFilter] logging 실패" } - } finally { - MDC.remove(REQUEST_ID) + log.error(e) { "[${this::class.simpleName}] Logging 실패" } } + + MDC.remove(REQUEST_ID) } } \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/constant/HttpClientIp.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/constant/HttpClientIp.kt new file mode 100644 index 0000000..e15ef31 --- /dev/null +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/constant/HttpClientIp.kt @@ -0,0 +1,17 @@ +package io.beaniejoy.dongnecafe.infra.logging.constant + +/** + * http request client ip possible enum list + * (ref. https://blog.yevgnenll.me/posts/find-client-ip-from-http-request-header) + * @property headerName String client ip header name + */ +enum class HttpClientIp( + val headerName: String, +) { + X_FORWARDED_FOR("X-Forwarded-For"), + PROXY_CLIENT_IP("Proxy-Client-IP"), + WL_PROXY_CLIENT_IP("WL-Proxy-Client-IP"), + HTTP_X_FORWARDED("HTTP_X_FORWARDED"), + HTTP_X_FORWARDED_FOR("HTTP_X_FORWARDED_FOR"), + HTTP_CLIENT_IP("HTTP_CLIENT_IP") +} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/SecurityUser.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/SecurityUser.kt similarity index 87% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/SecurityUser.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/SecurityUser.kt index 17a705d..5f60611 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/SecurityUser.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/SecurityUser.kt @@ -1,4 +1,4 @@ -package io.beaniejoy.dongnecafe.security +package io.beaniejoy.dongnecafe.infra.security import io.beaniejoy.dongnecafe.domain.member.entity.Member import org.springframework.security.core.GrantedAuthority diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/config/JwtAuthenticationConfigurer.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/config/JwtAuthenticationConfigurer.kt similarity index 87% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/config/JwtAuthenticationConfigurer.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/config/JwtAuthenticationConfigurer.kt index 524b744..faa1f85 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/config/JwtAuthenticationConfigurer.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/config/JwtAuthenticationConfigurer.kt @@ -1,6 +1,6 @@ -package io.beaniejoy.dongnecafe.security.config +package io.beaniejoy.dongnecafe.infra.security.config -import io.beaniejoy.dongnecafe.security.filter.JwtAuthenticationFilter +import io.beaniejoy.dongnecafe.infra.security.filter.JwtAuthenticationFilter import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils import org.springframework.security.config.annotation.SecurityConfigurerAdapter import org.springframework.security.config.annotation.web.builders.HttpSecurity diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/constant/SecurityConstant.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/constant/SecurityConstant.kt similarity index 80% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/constant/SecurityConstant.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/constant/SecurityConstant.kt index 9371644..070313d 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/constant/SecurityConstant.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/constant/SecurityConstant.kt @@ -1,4 +1,4 @@ -package io.beaniejoy.dongnecafe.security.constant +package io.beaniejoy.dongnecafe.infra.security.constant object SecurityConstant { const val BEARER = "Bearer" diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/filter/JwtAuthenticationFilter.kt similarity index 89% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/filter/JwtAuthenticationFilter.kt index 6adabd5..2d6776a 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/filter/JwtAuthenticationFilter.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/filter/JwtAuthenticationFilter.kt @@ -1,8 +1,8 @@ -package io.beaniejoy.dongnecafe.security.filter +package io.beaniejoy.dongnecafe.infra.security.filter import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils -import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.BEARER -import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.WHITESPACE +import io.beaniejoy.dongnecafe.infra.security.constant.SecurityConstant.BEARER +import io.beaniejoy.dongnecafe.infra.security.constant.SecurityConstant.WHITESPACE import mu.KotlinLogging import org.springframework.http.HttpHeaders import org.springframework.security.core.context.SecurityContextHolder diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/handler/CustomAccessDeniedHandler.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/handler/CustomAccessDeniedHandler.kt similarity index 93% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/handler/CustomAccessDeniedHandler.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/handler/CustomAccessDeniedHandler.kt index 5c6701e..8069005 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/handler/CustomAccessDeniedHandler.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/handler/CustomAccessDeniedHandler.kt @@ -1,4 +1,4 @@ -package io.beaniejoy.dongnecafe.security.handler +package io.beaniejoy.dongnecafe.infra.security.handler import mu.KLogging import org.springframework.security.access.AccessDeniedException diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/handler/CustomAuthenticationEntryPoint.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/handler/CustomAuthenticationEntryPoint.kt similarity index 93% rename from dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/handler/CustomAuthenticationEntryPoint.kt rename to dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/handler/CustomAuthenticationEntryPoint.kt index 93b0287..c3361dd 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/security/handler/CustomAuthenticationEntryPoint.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/security/handler/CustomAuthenticationEntryPoint.kt @@ -1,4 +1,4 @@ -package io.beaniejoy.dongnecafe.security.handler +package io.beaniejoy.dongnecafe.infra.security.handler import mu.KLogging import org.springframework.security.core.AuthenticationException diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/HttpServletExtensions.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/HttpServletExtensions.kt index 121ad71..a7a1ef7 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/HttpServletExtensions.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/HttpServletExtensions.kt @@ -1,6 +1,7 @@ package io.beaniejoy.dongnecafe.utils.logging import com.google.gson.Gson +import io.beaniejoy.dongnecafe.infra.logging.constant.HttpClientIp import org.springframework.web.util.ContentCachingRequestWrapper import org.springframework.web.util.ContentCachingResponseWrapper import javax.servlet.http.HttpServletRequest @@ -22,6 +23,18 @@ fun HttpServletRequest.getRequestParams(): String { }.entries.joinToString("&") } +fun HttpServletRequest.getClientIp(): String { + HttpClientIp.values().forEach { clientIpHeader -> + this.getHeader(clientIpHeader.headerName).also { + if (it.isNullOrBlank().not() && "unknown".equals(it, true).not()) { + return it + } + } + } + + return this.remoteAddr +} + fun ContentCachingRequestWrapper.getRequestBody(): String { return this.contentAsByteArray.toString(Charsets.UTF_8) } diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/LoggingUtils.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/LoggingUtils.kt deleted file mode 100644 index 2e8b3c2..0000000 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/logging/LoggingUtils.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.beaniejoy.dongnecafe.utils.logging - -class LoggingUtils { - companion object { - - } -} \ No newline at end of file diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/JwtTokenUtils.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/JwtTokenUtils.kt index 21e53bf..81c20fd 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/JwtTokenUtils.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/JwtTokenUtils.kt @@ -1,7 +1,7 @@ package io.beaniejoy.dongnecafe.utils.security -import io.beaniejoy.dongnecafe.security.SecurityUser -import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.JWT_AUTHORITIES_KEY +import io.beaniejoy.dongnecafe.infra.security.SecurityUser +import io.beaniejoy.dongnecafe.infra.security.constant.SecurityConstant.JWT_AUTHORITIES_KEY import io.jsonwebtoken.Claims import io.jsonwebtoken.ExpiredJwtException import io.jsonwebtoken.Jwts diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/SecurityExtensions.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/SecurityExtensions.kt index 74250ab..b4b6c7c 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/SecurityExtensions.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/utils/security/SecurityExtensions.kt @@ -1,7 +1,7 @@ package io.beaniejoy.dongnecafe.utils.security -import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.ANONYMOUS_USER -import io.beaniejoy.dongnecafe.security.constant.SecurityConstant.ROLE_ANONYMOUS +import io.beaniejoy.dongnecafe.infra.security.constant.SecurityConstant.ANONYMOUS_USER +import io.beaniejoy.dongnecafe.infra.security.constant.SecurityConstant.ROLE_ANONYMOUS import org.springframework.security.core.Authentication fun Authentication.getAuthPrincipal() : String? { diff --git a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt index 8c831d8..8529490 100644 --- a/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt +++ b/dongne-service-api/src/main/kotlin/io/beaniejoy/dongnecafe/common/config/SecurityConfig.kt @@ -1,9 +1,9 @@ package io.beaniejoy.dongnecafe.common.config -import io.beaniejoy.dongnecafe.security.config.JwtAuthenticationConfigurer +import io.beaniejoy.dongnecafe.infra.security.config.JwtAuthenticationConfigurer import io.beaniejoy.dongnecafe.utils.security.JwtTokenUtils -import io.beaniejoy.dongnecafe.security.handler.CustomAccessDeniedHandler -import io.beaniejoy.dongnecafe.security.handler.CustomAuthenticationEntryPoint +import io.beaniejoy.dongnecafe.infra.security.handler.CustomAccessDeniedHandler +import io.beaniejoy.dongnecafe.infra.security.handler.CustomAuthenticationEntryPoint import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.security.servlet.PathRequest import org.springframework.context.annotation.Bean From 55527dfad395e498a7e3c2f454b3ec83075d42fa Mon Sep 17 00:00:00 2001 From: beaniejoy Date: Sat, 15 Apr 2023 21:29:26 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[#43]=20modify:=20log=20=ED=98=95=EC=8B=9D?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dongnecafe/infra/logging/HttpLogMessage.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/HttpLogMessage.kt b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/HttpLogMessage.kt index b6c9269..ae8f253 100644 --- a/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/HttpLogMessage.kt +++ b/dongne-common/src/main/kotlin/io/beaniejoy/dongnecafe/infra/logging/HttpLogMessage.kt @@ -5,7 +5,6 @@ import org.springframework.http.HttpStatus import org.springframework.web.util.ContentCachingRequestWrapper import org.springframework.web.util.ContentCachingResponseWrapper -// TODO: clientIP에 대해서 고민해보기 data class HttpLogMessage( val httpMethod: String, val requestUri: String, @@ -41,11 +40,11 @@ data class HttpLogMessage( return """ | |[REQUEST] ${this.httpMethod} ${this.requestUri} ${this.httpStatus} (${this.elapsedTime}) - |CLIENT_IP: ${this.clientIp} - |HEADERS: ${this.headers} - |REQUEST_PARAM: ${this.requestParam} - |REQUEST_BODY: ${this.requestBody} - |RESPONSE_BODY: ${this.responseBody} + |>> CLIENT_IP: ${this.clientIp} + |>> HEADERS: ${this.headers} + |>> REQUEST_PARAM: ${this.requestParam} + |>> REQUEST_BODY: ${this.requestBody} + |>> RESPONSE_BODY: ${this.responseBody} """.trimMargin() } } \ No newline at end of file