| | |
| | | package com.highdatas.mdm.util;
|
| | |
|
| | | import com.alibaba.fastjson.JSON;
|
| | | import com.alibaba.fastjson.JSONObject;
|
| | | import lombok.Data;
|
| | | import lombok.extern.slf4j.Slf4j;
|
| | | import org.apache.commons.io.IOUtils;
|
| | |
| | | import java.io.IOException;
|
| | | import java.net.URI;
|
| | | import java.net.URISyntaxException;
|
| | | import java.net.URLDecoder;
|
| | | import java.nio.charset.StandardCharsets;
|
| | | import java.time.LocalDateTime;
|
| | | import java.util.Objects;
|
| | |
| | | @Slf4j
|
| | | public class HttpTraceLogFilter extends OncePerRequestFilter implements Ordered {
|
| | |
|
| | | private static final String NEED_TRACE_PATH_PREFIX = "/api";
|
| | | private static final String UNNEED_TRACE_PATH_PREFIX = "/file";
|
| | | private static final String IGNORE_CONTENT_TYPE = "multipart/form-data";
|
| | |
|
| | |
|
| | |
| | | status = response.getStatus();
|
| | | } finally {
|
| | | String path = request.getRequestURI();
|
| | | boolean isFilterPath = path.startsWith(NEED_TRACE_PATH_PREFIX);
|
| | | isFilterPath = true;
|
| | | if (isFilterPath) {
|
| | | boolean isFilterPath = path.startsWith(UNNEED_TRACE_PATH_PREFIX);
|
| | | isFilterPath = true;
|
| | | if (!isFilterPath) {
|
| | | String requestBody = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8.name());
|
| | | log.info(requestBody);
|
| | | //1. 记录日志
|
| | |
| | | traceLog.setTime(LocalDateTime.now().toString());
|
| | | traceLog.setParameterMap(JSON.toJSONString(request.getParameterMap()));
|
| | | traceLog.setStatus(status);
|
| | | traceLog.setUserIp( request.getRemoteAddr());
|
| | | traceLog.setRequestBody(getRequestBody(request));
|
| | | traceLog.setResponseBody(getResponseBody(response));
|
| | | String responseBody = getResponseBody(response);
|
| | | try{
|
| | | JSONObject jsonObject = JSONObject.parseObject(responseBody);
|
| | | if (jsonObject != null){
|
| | | traceLog.setResponseStatus(jsonObject.getString("success"));
|
| | | }
|
| | | }
|
| | | catch (Exception e){
|
| | | e.printStackTrace();
|
| | | }
|
| | |
|
| | | // traceLog.setResponseBody(responseBody);
|
| | | log.info("Http trace log: {}", JSON.toJSONString(traceLog));
|
| | | }
|
| | | updateResponse(response);
|
| | |
| | |
|
| | |
|
| | | @Data
|
| | | private static class HttpTraceLog {
|
| | | public static class HttpTraceLog {
|
| | | private String path;
|
| | | private String parameterMap;
|
| | | private String method;
|
| | |
| | | private String time;
|
| | | private Integer status;
|
| | | private String requestBody;
|
| | | private String responseBody;
|
| | | private String userId;
|
| | | private String userIp;
|
| | | private String urlId;
|
| | | private String responseStatus;
|
| | | }
|
| | | }
|