Problema no botão back do navegador
May 13, 2008 Java EE, Programação 5 CommentsO botão back do navegador é muito útil ao usuário para ele conseguir navegar entre diferentes páginas e websites. Entretanto, o botão back pode trazer diversos problemas aos sites. Uma maneira de “travar” o botão é desabilitar completamente o cache das páginas que não devem permitir que sejam acessadas através do botão back.
Para se fazer isso no Java EE basta apenas criar um filtro e mapeá-lo para as url’s necessárias.
Segue abaixo o código do filtro:
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
public class ClearCacheFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Expires", "Sat, 1 Jan 1990 12:00:00 GMT");
httpResponse.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
httpResponse.addHeader("Cache-Control", "post-check=0, pre-check=0");
httpResponse.setHeader("Pragma", "no-cache");
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
Basicamente o que o filtro faz é setar as diretivas de cache para o navegador. Primeiro ele seta a data de expiração da página para uma data passada. Depois, o código seta 3 diretivas para desabilitar o cache:
- no-store: não armazena o conteúdo no cache
- no-cache: o browser deve enviar o request para o servidor mesmo se ele possuir uma cópia do que será enviado
- must-revalidate: revalida o cache em outro request, se estiver expirado
Depois, são setadas duas diretivas específicas do Internet Explorer. Estas diretivas indicam que o conteúdo sempre deve ser atualizado. E por último, é desabilitado o cache para o protocolo HTTP/1.0 (já que as outras 3 são específicas do HTTP/1.1).
Por último é preciso configurar o filtro na aplicação web. Segue abaixo o trecho de código referente à configuração para o filtro, bem como para ele ser aplicado a todas as páginas da aplicação:
<filter>
<filter-name>ClearCacheFilter</filter-name>
<filter-class>br.com.uol.ps.common.web.ClearCacheFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ClearCacheFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>