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>