通过Filter过滤器,可以实现对指定的请求信息进行日志记录。添加web.xml配置如下。
<filter>
<filter-name>RequestFilter</filter-name>
<filter-class>com.xxxxx.filter.RequestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RequestFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
考虑到在Filter对request在进行一次getInputStream()流操作之后,后续Controller就无法再读取。
解决思路:requestBody进行重新包装,将RequestBody的内容先读取出来,放在一个body[]。并重写getInputStream(),每次读取的时候,就可以再次获取RequestBody。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.*;
public class RequestBodyReaderWra