https://blog.csdn.net/a582127421/article/details/78321888#commentBox
@Component @Order(1) @Slf4j @WebFilter(filterName = "errorMsgFilter", urlPatterns = "/*") public class ErrorMsgFilter implements Filter {
@Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) servletResponse; ErrorMsgFilterResponseWrapper wrapper = new ErrorMsgFilterResponseWrapper(response); filterChain.doFilter(servletRequest, wrapper); String result = wrapper.getResponseData(response.getCharacterEncoding()); //...gono }
class ErrorMsgFilterResponseWrapper extends HttpServletResponseWrapper { private ByteArrayOutputStream buffer = null; private ServletOutputStream out = null; private PrintWriter writer = null; public ErrorMsgFilterResponseWrapper(HttpServletResponse response) throws IOException{ super(response); buffer = new ByteArrayOutputStream(); out = new WapperedOutputStream(buffer); writer = new PrintWriter(new OutputStreamWriter(buffer, "UTF-8")); } @Override public ServletOutputStream getOutputStream() throws IOException { return out; } @Override public PrintWriter getWriter() throws IOException { return writer; } @Override public void flushBuffer() throws IOException { if (out != null) { out.flush(); } if (writer != null) { writer.flush(); } } @Override public void reset() { buffer.reset(); } public String getResponseData(String charset) throws IOException { flushBuffer(); byte[] bytes = buffer.toByteArray(); try { return new String(bytes, charset); } catch (UnsupportedEncodingException e) { return ""; } } class WapperedOutputStream extends ServletOutputStream { private ByteArrayOutputStream bos = null; public WapperedOutputStream(ByteArrayOutputStream stream) throws IOException { bos = stream; } @Override public void write(int b) throws IOException { bos.write(b); } @Override public boolean isReady() { return false; } @Override public void setWriteListener(WriteListener listener) { } } }