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 cn.hutool.json.JSONUtil;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import com.axzo.framework.trace.util.ExceptionUtil;
|
import com.axzo.framework.trace.util.ExceptionUtil;
|
||||||
|
import com.axzo.framework.trace.wrapper.BodyReaderHttpServletRequestWrapper;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
@ -49,6 +50,10 @@ public class RequestLogHandlerInterceptor implements HandlerInterceptor, WebMvcC
|
|||||||
if (request.getDispatcherType().equals(DispatcherType.ERROR)) {
|
if (request.getDispatcherType().equals(DispatcherType.ERROR)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!(request instanceof BodyReaderHttpServletRequestWrapper)) {
|
||||||
|
log.info("[requestUrl:{}][method:{}][param:{}]", request.getRequestURL(), request.getMethod(), JSON.toJSONString(request.getParameterMap()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
String method = request.getMethod();
|
String method = request.getMethod();
|
||||||
StringBuffer requestUrl = request.getRequestURL();
|
StringBuffer requestUrl = request.getRequestURL();
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import org.slf4j.MDC;
|
|||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.util.StringUtils;
|
||||||
import org.springframework.web.filter.OncePerRequestFilter;
|
import org.springframework.web.filter.OncePerRequestFilter;
|
||||||
|
|
||||||
import javax.servlet.FilterChain;
|
import javax.servlet.FilterChain;
|
||||||
@ -38,19 +39,22 @@ public class TraceIdFilter extends OncePerRequestFilter {
|
|||||||
protected void doFilterInternal(@NonNull HttpServletRequest request,
|
protected void doFilterInternal(@NonNull HttpServletRequest request,
|
||||||
@NonNull HttpServletResponse response,
|
@NonNull HttpServletResponse response,
|
||||||
@NonNull FilterChain filterChain) throws ServletException, IOException {
|
@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
|
private void doFilter(FilterChain filterChain, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
|
||||||
BodyReaderHttpServletRequestWrapper bodyRequest = new BodyReaderHttpServletRequestWrapper(
|
|
||||||
request);
|
|
||||||
|
|
||||||
// trace id 补充
|
// trace id 补充
|
||||||
|
ExceptionUtil.ignoreException(() -> setTraceId(request, response), null);
|
||||||
ExceptionUtil.ignoreException(() -> setTraceId(bodyRequest, response), null);
|
|
||||||
|
|
||||||
|
|
||||||
//do
|
//do
|
||||||
try {
|
try {
|
||||||
filterChain.doFilter(bodyRequest, response);
|
filterChain.doFilter(request, response);
|
||||||
} finally {
|
} finally {
|
||||||
MDC.clear();
|
MDC.clear();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,10 +9,8 @@ import javax.servlet.ServletRequest;
|
|||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletRequestWrapper;
|
import javax.servlet.http.HttpServletRequestWrapper;
|
||||||
import javax.servlet.http.Part;
|
import javax.servlet.http.Part;
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
@ -35,7 +33,8 @@ public class BodyReaderHttpServletRequestWrapper extends HttpServletRequestWrapp
|
|||||||
super(request);
|
super(request);
|
||||||
this.request = request;
|
this.request = request;
|
||||||
// request.getParameterMap();
|
// 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();
|
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 {
|
private String getBodyString(ServletRequest request) throws IOException {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
InputStream ins = request.getInputStream();
|
InputStream ins = request.getInputStream();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user