Implementation of jpa saving for traffic traces.
This commit is contained in:
@@ -38,10 +38,6 @@ public class JwtAuthenticationFilter extends OncePerRequestFilter {
|
||||
.filter(authorizationHeader -> !isEmpty(authorizationHeader))
|
||||
.filter(authorizationHeader -> authorizationHeader.startsWith(BEARER_PREFIX))
|
||||
.map(authorizationHeader -> authorizationHeader.substring(BEARER_PREFIX.length()))
|
||||
.filter(token -> {
|
||||
String authorizationHeader = request.getHeader(AUTHORIZATION);
|
||||
return !isEmpty(authorizationHeader) && authorizationHeader.startsWith(BEARER_PREFIX);
|
||||
})
|
||||
.filter(jwtService::isValid)
|
||||
.flatMap(jwtService::extractUser)
|
||||
.map(CustomUserDetails::new)
|
||||
|
||||
@@ -1,16 +1,20 @@
|
||||
package org.codiki.exposition.traffic;
|
||||
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.aspectj.lang.JoinPoint;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.aspectj.lang.annotation.Before;
|
||||
import org.codiki.application.traffic.TrafficTraceUseCases;
|
||||
import org.codiki.application.user.UserUseCases;
|
||||
import org.codiki.domain.traffic.model.HttpMethod;
|
||||
import org.codiki.domain.traffic.model.TrafficEndpoint;
|
||||
import org.codiki.domain.user.model.User;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.request.RequestContextHolder;
|
||||
import org.springframework.web.context.request.ServletRequestAttributes;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
@Component
|
||||
@Aspect
|
||||
@@ -18,9 +22,14 @@ public class ApiCallsLoggerAspect {
|
||||
private static final String HTTP_HEADER_CORRELATION_ID = "x-correlation-id";
|
||||
|
||||
private final TrafficTraceUseCases trafficTraceUseCases;
|
||||
private final UserUseCases userUseCases;
|
||||
|
||||
public ApiCallsLoggerAspect(TrafficTraceUseCases trafficTraceUseCases) {
|
||||
public ApiCallsLoggerAspect(
|
||||
TrafficTraceUseCases trafficTraceUseCases,
|
||||
UserUseCases userUseCases
|
||||
) {
|
||||
this.trafficTraceUseCases = trafficTraceUseCases;
|
||||
this.userUseCases = userUseCases;
|
||||
}
|
||||
|
||||
@Before("@annotation(org.springframework.web.bind.annotation.GetMapping)")
|
||||
@@ -42,19 +51,25 @@ public class ApiCallsLoggerAspect {
|
||||
}
|
||||
|
||||
private void logApiCall() {
|
||||
Optional.ofNullable(RequestContextHolder.getRequestAttributes())
|
||||
getHttpServletRequest().ifPresent(request ->
|
||||
Optional.of(request.getMethod())
|
||||
.flatMap(HttpMethod::fromString)
|
||||
.ifPresent(queryHttpMethod -> {
|
||||
String queryUriPath = request.getRequestURI();
|
||||
TrafficEndpoint endpoint = new TrafficEndpoint(queryHttpMethod, queryUriPath);
|
||||
UUID userId = userUseCases.getAuthenticatedUser()
|
||||
.map(User::id)
|
||||
.orElse(null);
|
||||
String correlationId = request.getHeader(HTTP_HEADER_CORRELATION_ID);
|
||||
trafficTraceUseCases.saveNewTrace(endpoint, userId, correlationId);
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
private static Optional<HttpServletRequest> getHttpServletRequest() {
|
||||
return Optional.ofNullable(RequestContextHolder.getRequestAttributes())
|
||||
.filter(ServletRequestAttributes.class::isInstance)
|
||||
.map(ServletRequestAttributes.class::cast)
|
||||
.map(ServletRequestAttributes::getRequest)
|
||||
.ifPresent(request ->
|
||||
Optional.of(request.getMethod())
|
||||
.flatMap(HttpMethod::fromString)
|
||||
.ifPresent(queryHttpMethod -> {
|
||||
String queryUriPath = request.getRequestURI();
|
||||
String correlationId = request.getHeader(HTTP_HEADER_CORRELATION_ID);
|
||||
TrafficEndpoint endpoint = new TrafficEndpoint(queryHttpMethod, queryUriPath);
|
||||
trafficTraceUseCases.saveNewTrace(endpoint, correlationId);
|
||||
})
|
||||
);
|
||||
.map(ServletRequestAttributes::getRequest);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user