|
@@ -0,0 +1,110 @@
|
|
|
+//package com.xs.core.common.aspect;
|
|
|
+//
|
|
|
+//import com.alibaba.fastjson2.JSON;
|
|
|
+//import com.alibaba.fastjson2.JSONWriter;
|
|
|
+//import com.xs.core.model.log.entity.ApiRequestLog;
|
|
|
+//import com.xs.core.service.log.IApiRequestLogService;
|
|
|
+//import jakarta.servlet.http.HttpServletRequest;
|
|
|
+//import jakarta.servlet.http.HttpServletResponse;
|
|
|
+//import lombok.extern.slf4j.Slf4j;
|
|
|
+//import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+//import org.springframework.core.MethodParameter;
|
|
|
+//import org.springframework.core.annotation.Order;
|
|
|
+//import org.springframework.http.HttpInputMessage;
|
|
|
+//import org.springframework.http.MediaType;
|
|
|
+//import org.springframework.http.converter.HttpMessageConverter;
|
|
|
+//import org.springframework.http.server.ServerHttpRequest;
|
|
|
+//import org.springframework.http.server.ServerHttpResponse;
|
|
|
+//import org.springframework.http.server.ServletServerHttpRequest;
|
|
|
+//import org.springframework.http.server.ServletServerHttpResponse;
|
|
|
+//import org.springframework.web.bind.annotation.ControllerAdvice;
|
|
|
+//import org.springframework.web.context.request.RequestContextHolder;
|
|
|
+//import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
+//import org.springframework.web.servlet.mvc.method.annotation.RequestBodyAdviceAdapter;
|
|
|
+//import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
|
|
|
+//
|
|
|
+//import java.io.IOException;
|
|
|
+//import java.lang.reflect.Type;
|
|
|
+//import java.time.LocalDateTime;
|
|
|
+//import java.time.ZoneOffset;
|
|
|
+//import java.util.concurrent.CompletableFuture;
|
|
|
+//
|
|
|
+//@ControllerAdvice
|
|
|
+//@Slf4j
|
|
|
+//@Order(10)
|
|
|
+//public class ApiLogAdvice extends RequestBodyAdviceAdapter implements ResponseBodyAdvice<Object> {
|
|
|
+//
|
|
|
+// @Autowired
|
|
|
+// private IApiRequestLogService logService;
|
|
|
+//
|
|
|
+// private ThreadLocal<ApiRequestLog> apiLogThreadLocal = new ThreadLocal<>();
|
|
|
+//
|
|
|
+// @Override
|
|
|
+// public boolean supports(MethodParameter methodParameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
|
|
|
+// return true;
|
|
|
+// }
|
|
|
+//
|
|
|
+// @Override
|
|
|
+// public HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) throws IOException {
|
|
|
+// ApiRequestLog log = new ApiRequestLog();
|
|
|
+// log.setRequestTime(LocalDateTime.now());
|
|
|
+// ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
|
|
+// if (attributes != null) {
|
|
|
+// HttpServletRequest request = attributes.getRequest();
|
|
|
+// log.setRequestMethod(request.getMethod());
|
|
|
+// log.setRequestUrl(request.getRequestURI());
|
|
|
+// log.setIpAddress(request.getRemoteAddr());
|
|
|
+// log.setUserAgent(request.getHeader("User-Agent"));
|
|
|
+// }
|
|
|
+// apiLogThreadLocal.set(log);
|
|
|
+// return super.beforeBodyRead(inputMessage, parameter, targetType, converterType);
|
|
|
+// }
|
|
|
+//
|
|
|
+// @Override
|
|
|
+// public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
|
|
|
+// return true;
|
|
|
+// }
|
|
|
+//
|
|
|
+// @Override
|
|
|
+// public Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) {
|
|
|
+// ApiRequestLog log = apiLogThreadLocal.get();
|
|
|
+// log.setRequestParams(objectToJson(body));
|
|
|
+// return body;
|
|
|
+// }
|
|
|
+//
|
|
|
+// @Override
|
|
|
+// public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest servletRequest, ServerHttpResponse servletResponse) {
|
|
|
+// ApiRequestLog log1 = apiLogThreadLocal.get();
|
|
|
+// ServletServerHttpRequest request = (ServletServerHttpRequest) servletRequest;
|
|
|
+// ServletServerHttpResponse response = (ServletServerHttpResponse) servletResponse;
|
|
|
+// HttpServletRequest httpServletRequest = request.getServletRequest();
|
|
|
+// HttpServletResponse httpServletResponse = response.getServletResponse();
|
|
|
+// if (log1 != null) {
|
|
|
+// log1.setResponseBody(objectToJson(body));
|
|
|
+// log1.setResponseStatus(httpServletResponse.getStatus());
|
|
|
+// log1.setExecutionTime(System.currentTimeMillis() - log1.getRequestTime().toInstant(ZoneOffset.UTC).toEpochMilli());
|
|
|
+// saveLog(log1);
|
|
|
+// apiLogThreadLocal.remove();
|
|
|
+// }
|
|
|
+// return body;
|
|
|
+// }
|
|
|
+//
|
|
|
+// private void saveLog(ApiRequestLog log1) {
|
|
|
+// try {
|
|
|
+// CompletableFuture.runAsync(() -> {
|
|
|
+// logService.save(log1);
|
|
|
+// });
|
|
|
+// } catch (Exception e) {
|
|
|
+// log.error("Failed to save API log", e);
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// private String objectToJson(Object obj) {
|
|
|
+// try {
|
|
|
+// return JSON.toJSONString(obj, JSONWriter.Feature.WriteMapNullValue);
|
|
|
+// } catch (Exception e) {
|
|
|
+// log.error("Error converting object to JSON", e);
|
|
|
+// return null;
|
|
|
+// }
|
|
|
+// }
|
|
|
+//}
|