Skip to content

Commit

Permalink
hotfix: Body를 여러번 읽어 예외가 발생하는 이슈 해결 (#19)
Browse files Browse the repository at this point in the history
  • Loading branch information
kkanggu committed Aug 6, 2023
1 parent 2e152f1 commit 2099874
Showing 1 changed file with 22 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,19 @@ import mu.KLogger
import mu.KotlinLogging
import org.springframework.stereotype.Component
import org.springframework.web.filter.OncePerRequestFilter
import org.springframework.web.util.ContentCachingRequestWrapper
import org.springframework.web.util.ContentCachingResponseWrapper

@Component
class RequestLoggingFilter : OncePerRequestFilter() {
private val log: KLogger = KotlinLogging.logger {}

override fun doFilterInternal(request: HttpServletRequest, response: HttpServletResponse, filterChain: FilterChain) {
log.info { makeRequestLog(request) }
val wrappedRequest = ContentCachingRequestWrapper(request)
log.info { makeRequestLog(wrappedRequest) }

val wrappedResponse = ContentCachingResponseWrapper(response)
filterChain.doFilter(request, wrappedResponse)
filterChain.doFilter(wrappedRequest, wrappedResponse)

log.info { makeResponseLog(wrappedResponse) }
}
Expand All @@ -27,17 +29,18 @@ class RequestLoggingFilter : OncePerRequestFilter() {
val requestHeaders = request.headerNames.toList().associateWith {
request.getHeader(it)
}
val requestBody = request.reader.lines().toList().joinToString("\n")
val contentAsByteArray = (request as ContentCachingRequestWrapper).contentAsByteArray
val requestBody = if (contentAsByteArray.isNotEmpty()) String(contentAsByteArray) else ""

return """
{
"request" : {
"uri" : "${request.requestURI}",
"headers" : ${jacksonObjectMapper().writeValueAsString(requestHeaders)},
"body" : "$requestBody"
}
}
""".trimIndent()
{
"request" : {
"uri" : "${request.requestURI}",
"headers" : ${jacksonObjectMapper().writeValueAsString(requestHeaders)},
"body" : "$requestBody"
}
}
""".trimIndent()
}

private fun makeResponseLog(wrappedResponse: ContentCachingResponseWrapper): String {
Expand All @@ -48,14 +51,14 @@ class RequestLoggingFilter : OncePerRequestFilter() {
wrappedResponse.copyBodyToResponse()

return """
{
"response" : {
"status" : "${wrappedResponse.status}",
"headers" : ${jacksonObjectMapper().writeValueAsString(responseHeaders)},
"body" : "$responseBody"
}
}
""".trimIndent()
{
"response" : {
"status" : "${wrappedResponse.status}",
"headers" : ${jacksonObjectMapper().writeValueAsString(responseHeaders)},
"body" : "$responseBody"
}
}
""".trimIndent()
}

private fun getResponseBody(responseBody: ByteArray): String {
Expand Down

0 comments on commit 2099874

Please sign in to comment.