[Resolvido] Após logout com Spring Security ainda é possível dar um voltar e ver a última pag

Buenas? Não sou muito de ficar criando tópicos e juro que procurei em vários posts, blogs e listas que achei, mas
estou com um certo probleminha com o logout do spring:

Assim, ele esta fazendo a função perfeitamente: esconde os componentes por conforme o nível de acesso,
restringe o acesso de qualquer que seja a página, ou seja, esta tudo certinho como tem que ser. Mas quando faço o logout
se eu der um voltar no navegador ainda consigo visualizar o que foi acessado por último e meu professor ta "pegando no meu pé"
por causa disso.
Segue os trechos de configuração do spring referente ao logout e o sair que implementei:

<form-login login-page="/publico/login.faces"
			always-use-default-target="true" default-target-url="/restrito/principal.faces"
			authentication-failure-url="/publico/login.faces?login_error=1" />
<logout />

Depois de ver vários exemplos para obrigar a session a ser invalidada:

public String logout()
    {
      HttpSession sessao = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);  
      sessao.invalidate();  
      
      return "login"; 
    }

Mas mesmo assim se eu der um voltar ele exibe a última tela acessada, claro, quando for clicado em qualquer outro item do menu, ou qualquer outra opção do sistema, ou até mesmo
um segundo voltar ele “chuta” o cara pra tela de login. Mas segundo meu professor esse voltar não pode ficar assim. Alguem tem uma idéia ae pra ajudar?

isso não está acontecendo por conta de cache não ?

Você clica no voltar e ele pega a tela lá que estava no cache ?

Estou só divagando.

Aff man, vlw nem tinha pensado nisso.
Vlw

Nada.
Já apanhei mt de cache de browser.
tenta colocar no-cache ou pragma para ver se é isso mesmo

Perfeito! ^^

vlw.

Pessoal, desculpa reabrir este tópico.

Estou tendo o mesmo problema, mas não consegui entender onde foi colocado a solução. ALguém poderia me explicar, por favor.

Abraços

Buenas camilo?

Cara, tu tem um template né?

Coloca lá no teu template, esse código, no head do template:

<h:head>
        <meta http-equiv="Content-Type" contentType="text/html; charset=UTF-8" content="text/html; charset=UTF-8" />
        <META HTTP-EQUIV="EXPIRES" CONTENT="0" />    
        <META HTTP-EQUIV="pragma" CONTENT="nocache" />

Eu fiz isso e funfa de boa, o que entendi é que ele impede o browser de criar um cache da página.

Buenas Haziel.

Cara, coloquei mas não funcionou não, continuo tendo o mesmo problema :cry:

<h:head> <meta http-equiv="Content-Type" contentType="text/html; charset=UTF-8" content="text/html; charset=UTF-8" /> <meta http-equiv="EXPIRES" content="0" /> <meta http-equiv="pragma" content="nocache" />

Bom,

vamos então ao método que invalida a sessão:

Aqui te passo o método do bean, que invalida a sessão.

public String logout()
    {
      HttpSession sessao = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);  
      sessao.invalidate();  
      return "login"; //AQUI EU PASSO O NOME DA MINHA TELA INICIAL.  
    } 

E aqui a tag do botão que efetua o logout.

<p:menuitem value="Sair" action="#{contextoBean.logout()}" url="../j_spring_security_logout" icon="ui-icon-close" />

Com isso tem que funfa de boa.

Qualquer dúvida volta ae que te ajudo de boa.