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

9 respostas
H

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?

9 Respostas

L

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.

H

Aff man, vlw nem tinha pensado nisso.
Vlw

L

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

H

Perfeito! ^^

L

vlw.

C

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

H

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.

C

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" />

H

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.

Criado 18 de maio de 2012
Ultima resposta 31 de ago. de 2012
Respostas 9
Participantes 3