package org.jboss.errai.common.server;
import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletOutputStream;
import javax.servlet.WriteListener;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
/**
* Shared utilities for servlet filters in Errai.
*
* @author Christian Sadilek <csadilek@redhat.com>
*/
public class FilterCacheUtil {
private static final String EXPIRES_HEADER = "Expires";
private static final String CACHE_CONTROL_HEADER = "Cache-Control";
private static final String PRAGMA_HEADER = "Pragma";
private FilterCacheUtil() {}
public static HttpServletResponse noCache(final HttpServletResponse response) {
response.setHeader( CACHE_CONTROL_HEADER, "no-cache, no-store, must-revalidate" );
response.setHeader( PRAGMA_HEADER, "no-cache" );
response.setDateHeader( EXPIRES_HEADER, 0 );
return response;
}
public static CharResponseWrapper getCharResponseWrapper(final HttpServletResponse response) {
return new CharResponseWrapper(response);
}
public static class CharResponseWrapper extends HttpServletResponseWrapper {
protected CharArrayWriter charWriter = new CharArrayWriter();
protected ServletOutputStream outputStream = new ServletOutputStream() {
@Override
public boolean isReady() {
return true;
}
@Override
public void setWriteListener(WriteListener writeListener) {
// no-op
}
@Override
public void write(int b) throws IOException {
charWriter.write(b);
}
};
protected PrintWriter writer = new PrintWriter(charWriter);
public CharResponseWrapper(final HttpServletResponse response) {
super(response);
}
@Override
public ServletOutputStream getOutputStream() throws IOException {
return outputStream;
}
@Override
public PrintWriter getWriter() throws IOException {
return writer;
}
@Override
public void flushBuffer() throws IOException {
// Don't remove this override!
// When intercepting static content, WAS 8.5.5.5 prematurely calls this
// method to flush the output stream before we can calculate the content
// length (see above).
}
@Override
public String toString() {
return charWriter.toString();
}
}
}