diff --git a/server/src/main/java/com/objectcomputing/checkins/logging/RequestLoggingInterceptor.java b/server/src/main/java/com/objectcomputing/checkins/logging/RequestLoggingInterceptor.java index bee41bc66e..2430afc5f8 100644 --- a/server/src/main/java/com/objectcomputing/checkins/logging/RequestLoggingInterceptor.java +++ b/server/src/main/java/com/objectcomputing/checkins/logging/RequestLoggingInterceptor.java @@ -2,22 +2,20 @@ import com.objectcomputing.checkins.Environments; import io.micronaut.context.annotation.Requires; +import io.micronaut.core.order.Ordered; import io.micronaut.http.HttpAttributes; import io.micronaut.http.HttpRequest; -import io.micronaut.http.MutableHttpResponse; -import io.micronaut.http.annotation.Filter; -import io.micronaut.http.filter.HttpServerFilter; -import io.micronaut.http.filter.ServerFilterChain; +import io.micronaut.http.annotation.Body; +import io.micronaut.http.annotation.RequestFilter; +import io.micronaut.http.annotation.ServerFilter; import io.micronaut.http.filter.ServerFilterPhase; import io.micronaut.inject.ExecutableMethod; import io.micronaut.security.authentication.Authentication; import io.micronaut.security.filters.SecurityFilter; import io.micronaut.web.router.MethodBasedRouteInfo; -import org.reactivestreams.Publisher; +import jakarta.annotation.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; import java.security.Principal; import java.util.Optional; @@ -25,9 +23,9 @@ import static io.micronaut.http.annotation.Filter.MATCH_ALL_PATTERN; -@Filter(MATCH_ALL_PATTERN) +@ServerFilter(MATCH_ALL_PATTERN) @Requires(env = Environments.LOCAL) -public class RequestLoggingInterceptor implements HttpServerFilter { +public class RequestLoggingInterceptor implements Ordered { private static final Logger LOG = LoggerFactory.getLogger(RequestLoggingInterceptor.class); @@ -37,16 +35,17 @@ public int getOrder() { return ServerFilterPhase.SECURITY.order() + 1; } - private boolean intercept(HttpRequest request) { + @RequestFilter + void intercept(HttpRequest request, @Body @Nullable String body) { Optional auth = request.getAttribute(SecurityFilter.AUTHENTICATION, Authentication.class); request.getAttribute(HttpAttributes.ROUTE_INFO, MethodBasedRouteInfo.class).ifPresent(routeBuilder -> { String username = auth.map(Principal::getName).map(n -> n.isBlank() ? null : n).orElse("not authenticated"); String requestVerb = request.getMethodName(); - ExecutableMethod targetMethod = routeBuilder.getTargetMethod().getExecutableMethod(); + ExecutableMethod targetMethod = routeBuilder.getTargetMethod().getExecutableMethod(); String params = request.getParameters().asMap().entrySet().stream() .map(e -> e.getKey() + ":" + e.getValue()) .collect(Collectors.joining(",")); - String requestBody = request.getBody(String.class).orElse("empty"); + String requestBody = body == null ? "empty" : body; LOG.info( "User {} {} request to {} with body {} and parameters {} being handled by {}.{}", username, @@ -58,12 +57,5 @@ private boolean intercept(HttpRequest request) { targetMethod.getName() ); }); - return true; - } - - @Override - public Publisher> doFilter(HttpRequest request, ServerFilterChain chain) { - Mono interceptMono = Mono.fromCallable(() -> intercept(request)); - return Flux.from(interceptMono).switchMap(bool -> chain.proceed(request)); } }