2017-02-02 4 views
3

に基づいてレスポンスボディを変更します応答本体を暗号化します。 それ以外の場合は、要求/応答本文を変更しないでください。のJavaフィルタは、条件付きで、私は、ヘッダー「暗号化」カスタムの要求とチェックを遮断するサーブレットフィルタを持っている要求

応答を必要なときに変更するにはどうすればよいですか?あなたはHttpServletResponseWrapperを例を使用する必要が

答えて

1

は次のとおりです。

public class ReadTwiceHttpServletRequestWrapper extends HttpServletRequestWrapper { 

private ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 

public ReadTwiceHttpServletRequestWrapper(HttpServletRequest request) { 
    super(request); 
    try { 
     IOUtils.copy(request.getInputStream(), outputStream); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

@Override 
public BufferedReader getReader() throws IOException { 
    return new BufferedReader(new InputStreamReader(new ByteArrayInputStream(outputStream.toByteArray()))); 
} 

@Override 
public ServletInputStream getInputStream() throws IOException { 
    final ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); 
    return new ServletInputStream() { 

     @Override 
     public int readLine(byte[] b, int off, int len) throws IOException { 
      return inputStream.read(b, off, len); 
     } 

     @Override 
     public boolean isFinished() { 
      return inputStream.available() > 0; 
     } 

     @Override 
     public boolean isReady() { 
      return true; 
     } 

     @Override 
     public void setReadListener(ReadListener arg0) { 
      // TODO Auto-generated method stub 
     } 

     @Override 
     public int read() throws IOException { 
      return inputStream.read(); 
     } 
    }; 
} 

public void setBody(String body) { 
    outputStream = new ByteArrayOutputStream(); 
    try { 
     outputStream.write(body.getBytes()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public String getBody() { 
    return new String(outputStream.toByteArray()); 
} 

How to get the XML from POST request and modify it in Servlet Filter?

+0

を参照してください:

filterChain.doFilter(servletRequest, new HttpServletResponseWrapper((HttpServletResponse) servletResponse) { @Override public void setHeader(String name, String value) { if (!HTTPCacheHeader.ETAG.getName().equalsIgnoreCase(name)) { super.setHeader(name, value); } } }); 

これは身体を設定することができる方法の一例であるhttp://www.programcreek.com/java-api-examples/javax.servlet.http.HttpServletResponseWrapper

を参照してください。これは質問に答えることはできません。レスポンス本体で、ヘッダーではありません。 – yuz

+0

@yuz私は自分の答えを更新しました。 –

+1

ありがとうございます。 – yuz

関連する問題