Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Falha de Segurança | Autenticação Java Web

Contexto: Estou construindo um CRUD em Java Web para estudar e adquirir conhecimento.

Não estou usando nenhum Framework, somente JSTL para ter um código mais elegante nas JSPs.

Eu implementei recentemente a autenticação do sistema usando Filter e HttpSession. E implementei também o botão ‘sair’ que chama uma ação no meu sistema que invalida a sessão session.invalidate(); e depois redireciona para a página delogin.jsp.

Problema: Mesmo invalidando a sessão e barrando as requisições com Filtros, se eu clicar em ‘Voltar’ no navegador, eu acesso o meu sistema na última página que eu acessei antes de clicar em ‘sair’.

Eu não consigo fazer nada lá dentro do sistema após 'voltar'. Pois, qualquer ação é barrada pelo meu Filtro, que checka se o usuário está logado ou não. Porém, eu gostaria que ao tentar voltar a página, o navegador redirecionasse sempre para a página de login.

Estou usando o Tomcat, na versão 9. Mas, já testei usando o Jetty, e o resultado foi o mesmo.

O que já tentei: Já tentei usar forward e redirect. O problema permanece em ambos os casos. Atualmente meu bloco de código de Logout está assim:

req.getSession().invalidate();
resp.setHeader("Cache-Control","no-cache"); 
resp.setHeader("Cache-Control","no-store"); 
resp.setHeader("Pragma", "no-cache"); // HTTP 1.0.
resp.setHeader("Expires", "0"); // Proxies. 
resp.sendRedirect("login.jsp");

Alguém já passou por isso? Poderiam dar uma sugestão?

1 resposta
solução!

Consegui resolver colocando essas linhas de código no bloco em que faço o forward. Não sei se é amelhor solução, mas resolveu:

            resp.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
            resp.setHeader("Cache-Control","no-cache"); 
            resp.setHeader("Cache-Control","no-store"); 
            resp.setHeader("Pragma", "no-cache");
            resp.setHeader("Expires", "0");