TraceIdFilter.kt
package com.example.templateproject.web.configuration.filter
import io.micrometer.tracing.Tracer
import jakarta.servlet.FilterChain
import jakarta.servlet.http.HttpServletRequest
import jakarta.servlet.http.HttpServletResponse
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.stereotype.Component
import org.springframework.web.filter.OncePerRequestFilter
@Component
@ConditionalOnProperty(name = ["management.tracing.export.enabled"], havingValue = "true")
class TraceIdFilter(
private val tracer: Tracer,
) : OncePerRequestFilter() {
companion object {
const val TRACE_ID_HEADER = "X-Trace-ID"
}
override fun doFilterInternal(
request: HttpServletRequest,
response: HttpServletResponse,
chain: FilterChain,
) {
if (isValidRequestPath(request.requestURI)) {
tracer.currentTraceContext().context()?.let {
response.setHeader(TRACE_ID_HEADER, it.traceId())
}
}
chain.doFilter(request, response)
}
}