Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Problemas com setMaxInactiveInterval do Session

Olá,

Estou com um problema após a session expirar na minha pagina (estou usando Servlet). O problema é o seguinte:

Eu faço login na pagina; clico no menu para ir para a pagina de histórico de pedidos, e espero o tempo de inatividade passar; recarrego a pagina e ele desloga normalmente; até ai tudo funcionando normalmente. Quando logo novamente ele vai para a pagina inicial e quando clico para ir para o histórico ele retorna para a pagina de login, e se eu recarregar a pagina de login sem refazer o login ele abre a pagina de histórico normalmente. O mais estranho é que quando ele volta para a pagina de login é como se ela ficasse "invisível", ela não passa pelo Controller, muito menos entra na classe Historico. Abaixo as três classes utilizadas neste processo:

Classe Login:

public class Login implements Tarefa {

    @Override
    public String executa(HttpServletRequest req, HttpServletResponse resp) throws Exception {

        String email = req.getParameter("e-mail");
        String senha = req.getParameter("senha");

        try (Connection con = new ConnectionPool().getConnetion()) {

            Empresa empresa = new EmpresaDAO(con).buscaLogin(email, senha);

            if (empresa != null) {
                System.out.println("Fiz o login");
                HttpSession session = req.getSession();
                session.setAttribute("usuarioLogado", empresa);
                session.setMaxInactiveInterval(20);
                return "/WEB-INF/paginas/pedidos.jsp";

            }
        }
        System.out.println("retornei o index do login");
        return "/index.html";
    }
}

Classe Controller

@WebServlet(urlPatterns = "/exec")
public class Controller extends HttpServlet{


    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String tarefa = req.getParameter("tarefa");
        System.out.println("entrei na classe Controller");
        if(tarefa == null) {
            throw new IllegalArgumentException("Voce esqueceu de passar a tarefa");
        }

        try {
            String nomeClasse = "br.com.portal.hidrosistemas.web." + tarefa;
            Class<?> type = Class.forName(nomeClasse);
            Tarefa instancia = (Tarefa) type.newInstance();
            String pagina = instancia.executa(req, resp);
            RequestDispatcher dispatcher = req.getServletContext().getRequestDispatcher(pagina);
            System.out.println(pagina);
            dispatcher.forward(req, resp);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Classe Historico

public String executa(HttpServletRequest req, HttpServletResponse resp) throws Exception {

        System.out.println("entrei na classe Historico");
        HttpSession session = req.getSession();
        Empresa usuario = (Empresa) session.getAttribute("usuarioLogado");

        if(usuario == null) {
            System.out.println("entrei no null");
            return "/index.html";
        }else {
            try (Connection con = new ConnectionPool().getConnetion()) {
                    System.out.println("entrei no session");
                    session.getMaxInactiveInterval();
                    List<HistoricoPedido> hist = new HistoricoPedidosDAO(con).listaHistoricoPedidos(usuario.getId());
                    session.setAttribute("historicoPedido", hist);
                    return "/WEB-INF/paginas/historico.jsp";
            }
        }        
    }
}
6 respostas
solução!

Acho que tá muito baixo o setMaxInactiveInterval aumenta mais ele pra demorar mais.

Isto acontece com qualquer tempo que eu colocar, este tempo esta so para testar

Nesse bloco quando ele entra na página pela segunda vez como está o conteúdo da variável empresa?

if (empresa != null) {
                System.out.println("Fiz o login");
                HttpSession session = req.getSession();
                session.setAttribute("usuarioLogado", empresa);
                session.setMaxInactiveInterval(20);
                return "/WEB-INF/paginas/pedidos.jsp";

            }

Esta assim:

Busca o usuario no banco de dados.

Empresa empresa = new EmpresaDAO(con).buscaLogin(email, senha);

Sim, mas eu me refiro ao estado da variável. Quando a página é carregada pela segunda vez chega a entrar nesse if ou não?

Sim entra, mas eu alterei o tempo e parece que deu certo, pelo jeito era isso mesmo