TraceIdFilter增加contentType=formdata判断
This commit is contained in:
parent
377030333c
commit
b09935129f
@ -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();
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
// wrapper
|
||||
BodyReaderHttpServletRequestWrapper bodyRequest = new BodyReaderHttpServletRequestWrapper(
|
||||
request);
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user