擷取並記錄HTTP Servlet 回應輸出流內容
在Java Web 伺服器中,您可能會遇到需要記錄傳入請求的情況參數和結果伺服器回應。本文提供了一個取得 HTTP servlet 回應輸出流內容以進行日誌記錄的解決方案。
要實現此目的,您可以利用過濾器透過名為 HttpServletResponseWrapper 的自訂實作來包裝 HttpServletResponse 物件。在此包裝器中,我們重寫 getOutputStream() 和 getWriter() 方法以傳回自訂的 ServletOutputStream 實作 ServletOutputStreamCopier。
ServletOutputStreamCopier 包裝原始輸出流並將寫入的位元組複製到 ByteArrayOutputStream,可透過 byte[ 存取] 透過 getCopy() 方法。
一旦自訂回應包裝器進入地方,我們將其傳遞給 FilterChain#doFilter() 呼叫。請求-回應週期完成後,我們從 ServletOutputStreamCopier 檢索複製的回應內容進行日誌記錄。
以下是此類過濾器的範例實作:
public class ResponseLogger implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { if (response.getCharacterEncoding() == null) { response.setCharacterEncoding("UTF-8"); } HttpServletResponseCopier responseCopier = new HttpServletResponseCopier((HttpServletResponse) response); chain.doFilter(request, responseCopier); responseCopier.flushBuffer(); byte[] copy = responseCopier.getCopy(); System.out.println(new String(copy, response.getCharacterEncoding())); } }
此篩選器實作擷取回應輸出為位元組數組,讓您處理日誌記錄或任何其他必要的處理。
程式碼片段也提供了 HttpServletResponseCopier 和 ServletOutputStreamCopier 來完成解決方案。
以上是如何在 Java 中擷取並記錄 HTTP Servlet 回應輸出流內容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!