1:具體步驟 寫個類繼承HttpServletResponseWrapper 在類里 輸出respopnse中的值
2: 在過濾器哪里引用-----之后在將數據寫入到response中
類的寫法
package org.gocom.components.coframe.auth.intercepter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
public class DatasWrapper extends HttpServletResponseWrapper {
private class ResponsePrintWriter extends PrintWriter
{
ByteArrayOutputStream output;
public ResponsePrintWriter(ByteArrayOutputStream output)
{
super(output);
this.output = output;
}
public ByteArrayOutputStream getByteArrayOutputStream()
{
return output;
}
}
private ResponsePrintWriter writer;
private ByteArrayOutputStream output;
public DatasWrapper(HttpServletResponse httpServletResponse)
{
super(httpServletResponse);
output = new ByteArrayOutputStream();
writer = new ResponsePrintWriter(output);
}
public void finalize() throws Throwable
{
super.finalize();
output.close();
writer.close();
}
public String getContent()
{
try
{
writer.flush();
return writer.getByteArrayOutputStream().toString("GBK");
}
catch(UnsupportedEncodingException e)
{
return "UnsupportedEncoding";
}
}
public void close() throws IOException
{
writer.close();
}
public PrintWriter getWriter() throws IOException
{
return writer;
}
}
過濾器的寫法 , 順序 在 chain 之前創建繼承類wrapperResponse , 將wrapperResponse 傳入chain ,之后就可以用wrapperResponse 獲取想要得值----最后在將值寫入到reponse中
HttpServletResponse httpRep = (HttpServletResponse) response; // 傳進的response
DatasWrapper wrapperResponse = new DatasWrapper(httpRep); //封裝response
chain.doIntercept(httpReq, wrapperResponse); // 在 chain的時候將封裝的wrapperResponse傳入
String html = wrapperResponse.getContent(); // 在chain 后 獲取response 中得值
response.setContentLength(-1);
response.getWriter().write( html); // 將值重新寫入到 response 這里得response 是傳入過濾器中,不是封裝得wrapperResponse
