common/app/http/RequestIdFilter.scala (20 lines of code) (raw):

package http import common.{GuLogging} import org.apache.pekko.stream.Materializer import play.api.mvc.{Filter, RequestHeader, Result} import java.util.UUID import scala.concurrent.{ExecutionContext, Future} class RequestIdFilter(implicit val mat: Materializer, executionContext: ExecutionContext) extends Filter with GuLogging { override def apply(next: RequestHeader => Future[Result])(rh: RequestHeader): Future[Result] = { val headerKey = "x-gu-xid" // Play Framework's Headers.get(key) does a case-insensitive lookup val updatedRequest = if (rh.headers.get(headerKey).isEmpty) { rh.withHeaders(rh.headers.add(headerKey -> UUID.randomUUID().toString)) } else { rh } next(updatedRequest) } }