package com.sinata.appointment.config;
|
|
import com.sinata.appointment.service.OpLogApplicationService;
|
import jakarta.servlet.FilterChain;
|
import jakarta.servlet.ServletException;
|
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.util.UUID;
|
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;
|
|
@Component
|
@Order(Ordered.HIGHEST_PRECEDENCE)
|
public class TraceIdFilter extends OncePerRequestFilter {
|
|
@Override
|
protected void doFilterInternal(
|
HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
|
throws ServletException, IOException {
|
String traceId = request.getHeader("X-Trace-Id");
|
if (traceId == null || traceId.isBlank()) {
|
traceId = UUID.randomUUID().toString().replace("-", "");
|
}
|
MDC.put(OpLogApplicationService.MDC_TRACE, traceId);
|
response.setHeader("X-Trace-Id", traceId);
|
try {
|
filterChain.doFilter(request, response);
|
} finally {
|
MDC.remove(OpLogApplicationService.MDC_TRACE);
|
}
|
}
|
}
|