Last active
March 7, 2021 16:20
-
-
Save njofce/991f309afc3966dd5991a551654aba2f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Component | |
public class LogRequestFilter implements Filter { | |
private final Logger logger = LoggerFactory.getLogger(LogRequestFilter.class); | |
@Override | |
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, | |
FilterChain filterChain) throws IOException, ServletException { | |
logPostOrPutRequestBody((HttpServletRequest) servletRequest); | |
filterChain.doFilter(servletRequest, servletResponse); | |
} | |
private void logPostOrPutRequestBody(HttpServletRequest httpRequest) throws IOException { | |
if(Arrays.asList("POST", "PUT").contains(httpRequest.getMethod())) { | |
String characterEncoding = httpRequest.getCharacterEncoding(); | |
Charset charset = Charset.forName(characterEncoding); | |
String bodyInStringFormat = readInputStreamInStringFormat(httpRequest.getInputStream(), charset); | |
logger.info("Request body: {}", bodyInStringFormat); | |
} | |
} | |
private String readInputStreamInStringFormat(InputStream stream, Charset charset) throws IOException { | |
final int MAX_BODY_SIZE = 1024; | |
final StringBuilder bodyStringBuilder = new StringBuilder(); | |
if (!stream.markSupported()) { | |
stream = new BufferedInputStream(stream); | |
} | |
stream.mark(MAX_BODY_SIZE + 1); | |
final byte[] entity = new byte[MAX_BODY_SIZE + 1]; | |
final int bytesRead = stream.read(entity); | |
if (bytesRead != -1) { | |
bodyStringBuilder.append(new String(entity, 0, Math.min(bytesRead, MAX_BODY_SIZE), charset)); | |
if (bytesRead > MAX_BODY_SIZE) { | |
bodyStringBuilder.append("..."); | |
} | |
} | |
stream.reset(); | |
return bodyStringBuilder.toString(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment