@WebFilter(urlPatterns = "/*") public class GlobalFilter implements Filter { private Logger logger = LoggerFactory.getLogger(GlobalFilter.class); @Override public void init(FilterConfig filterConfig) throws ServletException { } /** * 拦截请求和相应信息,并保存到数据库中 */ @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { WkResponseWrapper wrapper = new WkResponseWrapper((HttpServletResponse)response); ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper((HttpServletRequest) request); HttpServletRequest req = (HttpServletRequest) request; String params = ""; try { chain.doFilter(requestWrapper, wrapper); String respOnseContent= new String(wrapper.getDataStream()); String method = req.getMethod(); if ("POST".equalsIgnoreCase(method)) { params = new String(requestWrapper.getContentAsByteArray()); } else if ("GET".equalsIgnoreCase(method)) { params = JSON.toJSONString(request.getParameterMap()); } response.getWriter().write(responseContent); } catch (Exception e) { logger.error("保存请求和相应信息时出现异常:", e); } } @Override public void destroy() { } } public class WkResponseWrapper extends HttpServletResponseWrapper { ByteArrayOutputStream output; FilterServletOutputStream filterOutput; public WkResponseWrapper(HttpServletResponse response) { super(response); output = new ByteArrayOutputStream(); } @Override public ServletOutputStream getOutputStream() throws IOException { if (filterOutput == null) { filterOutput = new FilterServletOutputStream(output); } return filterOutput; } public byte[] getDataStream() { return output.toByteArray(); } class FilterServletOutputStream extends ServletOutputStream { DataOutputStream output; public FilterServletOutputStream(OutputStream output) { this.output = new DataOutputStream(output); } @Override public void write(int arg0) throws IOException { output.write(arg0); } @Override public void write(byte[] arg0, int arg1, int arg2) throws IOException { output.write(arg0, arg1, arg2); } @Override public void write(byte[] arg0) throws IOException { output.write(arg0); } @Override public boolean isReady() { return false; } @Override public void setWriteListener(WriteListener writeListener) { } } }