@Override
    public boolean preHandle(final HttpServletRequest httpServletRequest,
                             final HttpServletResponse httpServletResponse,
                             final Object handler) {
        val traceId = StringUtils.defaultIfBlank(
            traceIdExtractor.extractTraceIdFromRequest(httpServletRequest),
            httpServletRequest.getHeader(HEADER_B3_TRACE_ID));
        ThreadContext.put(StackdriverTraceConstants.MDC_FIELD_TRACE_ID, traceId);
        var url = httpServletRequest.getRequestURL().toString();
        val queryString = httpServletRequest.getQueryString();
        if (queryString != null) {
            url += '?' + queryString;
        }
        ThreadContext.put("requestUrl", url);
        return true;
    }
B3 Propagation is a specification for the header "b3" and those that start with "x-b3-". These
headers are used for trace context propagation across service boundaries.
Trace identifiers are 64 or 128-bit, but all span identifiers within a trace are 64-bit.
All identifiers are opaque.
support/cas-server-support-gcp-logging/src/main/java/org/apereo/cas/logging/GoogleCloudLoggingWebInterceptor.java