DISABLE Browser Caching
Browser caching of page content has negative security implications when
your application runs on shared terminals (like the public library). You
can turn it off with this simple phase listener. Well, maybe. As some
of the comments indicate, browsers are finicky, and of course, we never
trust the browser, anyway, so using this technique is certainly not a
security guarantee of any kind.
import
javax.faces.context.FacesContext;
import
javax.faces.event.PhaseEvent;
import
javax.faces.event.PhaseId;
import
javax.faces.event.PhaseListener;
import
javax.servlet.http.HttpServletResponse;
public
class
CacheControlPhaseListener
implements
PhaseListener
{
public
PhaseId getPhaseId()
{
return
PhaseId.RENDER_RESPONSE;
}
public
void
afterPhase(PhaseEvent event)
{
}
public
void
beforePhase(PhaseEvent event)
{
FacesContext facesContext = event.getFacesContext();
HttpServletResponse response = (HttpServletResponse) facesContext
.getExternalContext().getResponse();
response.addHeader(
"Pragma"
,
"no-cache"
);
response.addHeader(
"Cache-Control"
,
"no-cache"
);
// Stronger according to blog comment below that references HTTP spec
response.addHeader(
"Cache-Control"
,
"no-store"
);
response.addHeader(
"Cache-Control"
,
"must-revalidate"
);
// some date in the past
response.addHeader(
"Expires"
,
"Mon, 8 Aug 2006 10:00:00 GMT"
);
}
<
lifecycle
>
<
phase-listener
id
=
"nocache"
>my.util.CacheControlPhaseListener</
phase-listener
>
</
lifecycle
>
Comments