TraceIdFilter增加contentType=formdata判断

This commit is contained in:
xudawei 2024-05-16 17:22:29 +08:00
parent 377030333c
commit b09935129f
3 changed files with 20 additions and 26 deletions

View File

@ -3,6 +3,7 @@ package com.axzo.framework.trace.interceptor;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.axzo.framework.trace.util.ExceptionUtil;
import com.axzo.framework.trace.wrapper.BodyReaderHttpServletRequestWrapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@ -49,6 +50,10 @@ public class RequestLogHandlerInterceptor implements HandlerInterceptor, WebMvcC
if (request.getDispatcherType().equals(DispatcherType.ERROR)) {
return;
}
if (!(request instanceof BodyReaderHttpServletRequestWrapper)) {
log.info("[requestUrl:{}][method:{}][param:{}]", request.getRequestURL(), request.getMethod(), JSON.toJSONString(request.getParameterMap()));
return;
}
String method = request.getMethod();
StringBuffer requestUrl = request.getRequestURL();

View File

@ -9,6 +9,7 @@ import org.slf4j.MDC;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
@ -38,19 +39,22 @@ public class TraceIdFilter extends OncePerRequestFilter {
protected void doFilterInternal(@NonNull HttpServletRequest request,
@NonNull HttpServletResponse response,
@NonNull FilterChain filterChain) throws ServletException, IOException {
if ((StringUtils.hasText(request.getContentType()) && request.getContentType().toLowerCase().startsWith("multipart/form-data"))) {
this.doFilter(filterChain, request, response);
} else {
// wrapper
BodyReaderHttpServletRequestWrapper bodyRequest = new BodyReaderHttpServletRequestWrapper(
request);
this.doFilter(filterChain, bodyRequest, response);
}
}
private void doFilter(FilterChain filterChain, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// trace id 补充
ExceptionUtil.ignoreException(() -> setTraceId(bodyRequest, response), null);
ExceptionUtil.ignoreException(() -> setTraceId(request, response), null);
//do
try {
filterChain.doFilter(bodyRequest, response);
filterChain.doFilter(request, response);
} finally {
MDC.clear();
}

View File

@ -9,10 +9,8 @@ import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.Part;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@ -35,7 +33,8 @@ public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapp
super(request);
this.request = request;
// request.getParameterMap();
body = getBodyBytes(request);
String sessionStream = getBodyString(request);
body = sessionStream.getBytes(Charset.forName("UTF-8"));
}
@ -45,20 +44,6 @@ public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapp
return request.getParts();
}
private byte[] getBodyBytes(ServletRequest request) throws IOException {
try (BufferedInputStream bis = new BufferedInputStream(request.getInputStream());
ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
byte[] buffer = new byte[1024];
int len;
while ((len = bis.read(buffer)) > 0) {
baos.write(buffer, 0, len);
}
return baos.toByteArray();
} catch (IOException ex) {
throw ex;
}
}
private String getBodyString(ServletRequest request) throws IOException {
StringBuilder sb = new StringBuilder();
InputStream ins = request.getInputStream();