2017-08-06 16 views
0

私は春4を使用しており、フィルタはservletResponseでエラー応答を得ています。これには、エラーメッセージと共に出力ストリームが含まれます。 Outputstreamでこのエラーメッセージを取得し、アプリに監査するにはどうすればよいですか?フィルタを取得する方法httpservletresponseフィルタの出力ストリームエラーメッセージ

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 =新しい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バイト[] byteArr = capture.toByteArray()。 –

関連する問題