Tenho o requisito de que o usuário final não possa voltar à página restrita após fazer logout / logout. Mas atualmente o usuário final é capaz de fazer isso pelo botão Voltar do navegador, visitando o histórico do navegador ou até mesmo reinserindo a URL na barra de endereços do navegador.
Basicamente, desejo que o usuário final não consiga acessar a página restrita de nenhuma forma após sair. Como posso conseguir isso da melhor maneira? Posso desativar o botão Voltar com JavaScript?
Respostas:
Você pode e não deve desabilitar o botão Voltar ou o histórico do navegador. Isso é ruim para a experiência do usuário. Existem hacks de JavaScript, mas eles não são confiáveis e também não funcionarão quando o cliente tiver o JS desativado.
Seu problema concreto é que a página solicitada foi carregada do cache do navegador em vez de diretamente do servidor. Isso é essencialmente inofensivo, mas confuso para o usuário final, porque ele / ela pensa incorretamente que está realmente vindo do servidor.
Você só precisa instruir o navegador a não armazenar em cache todas as páginas JSP restritas (e, portanto, não apenas a página / ação de logout em si!). Desta forma, o navegador é forçado a solicitar a página do servidor em vez de do cache e, portanto, todas as verificações de login no servidor serão executadas. Você pode fazer isso usando um filtro que define os cabeçalhos de resposta necessários no
doFilter()
método:Mapeie isso
Filter
em umurl-pattern
de interesse, por exemplo*.jsp
.Ou se você deseja colocar essa restrição apenas em páginas seguras, você deve especificar um padrão de URL que cubra todas essas páginas seguras. Por exemplo, quando eles estão todos na pasta
/app
, você precisa especificar o padrão de URL de/app/*
.Além disso, você pode fazer esse trabalho da mesma
Filter
forma que verifica a presença do usuário conectado.Não se esqueça de limpar o cache do navegador antes de testar! ;)
Veja também:
fonte
doFilter()
método. Quando pressiono o botão de logout, ele é redirecionado para um servlet onde invalido a sessão. Não tenho certeza de como odoFilter()
método entra em jogo aqui. Você pode me dizer como implementar isso? Como em, as etapas corretas a seguir. Obrigado.sendRedirect(...)
eforward()
.* .jsp no padrão de URL não funcionará se você encaminhar uma página. Tente incluir seu servlet também .. isso tornará seu aplicativo seguro contra este problema do botão Voltar.
fonte
A maneira mais simples de fazer isso sem desativar o botão de retorno do navegador é adicionar este código ao
page_load
evento da página que você não deseja que o usuário volte depois de sair:fonte
Você pode tentar dizer ao navegador para não armazenar em cache a página inicial (usando os cabeçalhos apropriados - Expires, Cache-Control, Pragma). Mas não é garantido que funcione. O que você pode fazer é fazer uma chamada ajax para o servidor no carregamento da página para verificar se o usuário está logado e, se não, redirecionar.
fonte
A maneira correta de fazer isso é adicionar o
cabeçalho em páginas protegidas. Quando o usuário fizer logout, limpe o cookie da sessão. Então, quando eles navegarem de volta após o logout, o cache do navegador falhará. Isso também tem a vantagem de não anular completamente o cache.
fonte