<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fabio Brandão - Blog &#187; Back Button</title>
	<atom:link href="http://www.fnbrandao.com.br/blog/tag/back-button/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fnbrandao.com.br/blog</link>
	<description></description>
	<lastBuildDate>Tue, 24 Aug 2010 01:33:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Problema no botão back do navegador</title>
		<link>http://www.fnbrandao.com.br/blog/2008/05/problema-no-botao-back-do-navegador/</link>
		<comments>http://www.fnbrandao.com.br/blog/2008/05/problema-no-botao-back-do-navegador/#comments</comments>
		<pubDate>Tue, 13 May 2008 12:46:16 +0000</pubDate>
		<dc:creator>fabio</dc:creator>
				<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Back Button]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Filtro]]></category>
		<category><![CDATA[JEE]]></category>

		<guid isPermaLink="false">http://www.fnbrandao.com.br/blog/?p=8</guid>
		<description><![CDATA[O 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 &#8220;travar&#8221; 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 [...]]]></description>
			<content:encoded><![CDATA[<p>O 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 <em>&#8220;travar&#8221;</em> o botão é desabilitar completamente o cache das páginas que não devem permitir que sejam acessadas através do botão back.<br />
Para se fazer isso no Java EE basta apenas criar um filtro e mapeá-lo para as url&#8217;s necessárias.<br />
Segue abaixo o código do filtro:</p>
<p><code>
<pre>
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 {
    }

}
</pre>
<p></code></p>
<p>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:</p>
<ul>
<li><strong>no-store:</strong> não armazena o conteúdo no cache</li>
<li><strong>no-cache:</strong> o browser deve enviar o request para o servidor mesmo se ele possuir uma cópia do que será enviado</li>
<li><strong>must-revalidate:</strong> revalida o cache em outro request, se estiver expirado</li>
</ul>
<p>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).</p>
<p>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:<br />
<code>
<pre>
&lt;filter&gt;
	&lt;filter-name&gt;ClearCacheFilter&lt;/filter-name&gt;
	&lt;filter-class&gt;br.com.uol.ps.common.web.ClearCacheFilter&lt;/filter-class&gt;
&lt;/filter&gt;

&lt;filter-mapping&gt;
	&lt;filter-name&gt;ClearCacheFilter&lt;/filter-name&gt;
	&lt;url-pattern&gt;/*&lt;/url-pattern&gt;
&lt;/filter-mapping&gt;
</pre>
<p></code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.fnbrandao.com.br/blog/2008/05/problema-no-botao-back-do-navegador/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
