2017-08-06 50 views
0

我使用spring 4和篩選器我在servletResponse中得到了一些錯誤響應。它包含帶有錯誤消息的outputstream。 如何在輸出流中獲取此錯誤消息並審覈到我的應用程序?如何在篩選器中獲取篩選器httpservletresponse outputstream錯誤消息

try{    
      filterChain.doFilter(wrappedRequest, servletResponse); 
      HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse; 
      LOGGER.info("Basic Authenticate HttpServletResponse code {}"+httpServletResponse.getStatus()); 

      httpServletResponse.getOutputStream(); 
// I need to read this outputstream, its contains error message.? 




    }catch(Exception e){ 
     LOGGER.error("Error Basic Authenticate Error :{}", e); 
     HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse; 
     AtomicInteger statusCode = new AtomicInteger(httpServletResponse.getStatus()); 
     Response response = ResponseUtil.populateResponse(statusCode, e.getMessage().toString(), 0); 
     httpServletResponse.sendError(httpServletResponse.getStatus(), e.getMessage()); 
     auditService.updateRestAuditRecord(auditId,StringUtils.EMPTY, response); 
    } 

回答

0

關鍵是裝飾者類HttpServletResponseWrapper。根據您的具體需求調整這些步驟:

  1. 完全讀取您想審覈的流類似於字節緩衝區。
  2. 做你的審計任務。
  3. 擴展HttpServletResponseWrapper,覆蓋getOutputStream()並返回一個擴展名爲ServletOutputStream的擴展字節緩衝區。
  4. HttpServletResponseWrapper傳遞給鏈中的下一個下游過濾器。
+0

好的,我會試試..謝謝 –

+0

我嘗試下面這段代碼,byteArr是空的。 1. HtmlResponseWrapper responseWrapper = new HtmlResponseWrapper(httpServletResponse); \t \t 2. ServletOutputStream sout = responseWrapper.getOutputStream(); \t \t \t ByteArrayOutputStream capture = new 3. ByteArrayOutputStream(responseWrapper.getBufferSize()); \t \t \t capture.writeTo(sout); \t \t \t sout.flush(); \t \t \t sout.close(); \t \t \t \t \t \t byte [] byteArr = capture.toByteArray(); –