Como verificar se sessão do usuário expirou

Boa tarde amigos,

Como posso verificar se a sessão do usuário está expirada e como poderia redirecionar para outra pagina caso a sessão esteja expirada?

Tenho que colocar algum código em todas as minhas JSP’s para verificar se a sessão expirou?

Como poderia fazer isto de forma simples e funcional?

Vlw amigos…

Abs

Página que controla a sessão

[code]

<%@ page contentType=“text/html;charset=ISO-8859-1”%>
<%
request.getSession(false).setMaxInactiveInterval(100);
int duracaoSessao = request.getSession(false).getMaxInactiveInterval();
long now = System.currentTimeMillis();
long ultimoAcesso = request.getSession(false).getLastAccessedTime();

    if (now - ultimoAcesso > duracaoSessao) {
        out.println("sessão expirou");
    } else {
        out.println("sessão válida");
    }

%>[/code]

Como incluir em todos os jsp’s

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<%@ page contentType="text/html;charset=ISO-8859-1"%>
<jsp:include page="sessao.jsp" />

Espero ter ajudado :wink:

Boa tarde!

A solução do amigo acima funciona, mas há um modo mais eficiente.


Use o padrão Interecept Filter !


Você cria um filtro que verifica a sessão, caso não exista o login, redireciona-se para a página apropriada. Com isso, você não precisa se preocupar em colocar código de verificação em nenhum JSP seu e concentra-se apenas na lógica do negócio. E o melhor, qualquer jsp seu já estará "automaticamente protegido" deste problema.

Dá uma olhada neste artigo, acho que vai te ajudar: http://www.devmedia.com.br/articles/viewcomp.asp?comp=5331

Abraço!

Visite o Blog do Perereca: http://www.blogdoperereca.blogspot.com

Amigo rodrigo.ferreira, estou tentando implementar a solução do filter do link, mas está apresentando alguns erros… que ainda estou analisando…

Estou usando Struts 1.3, tb é possível implementar esta solução do filter ne?

Vlw tb amigo thiago.correa …

Abs

Bom dia!!!

É possível fazer utilizando Struts sim… é possível fazer com qualquer tecnologia web (Struts/JSF/Spring MVC etc.)

O filtro é chamado entre todas as solicitações, o Struts não sabe que o filtro existe, nem o filtro sabe do Struts… aí no filtro você deve redirecionar para o “.do” adequado.

Estude este artigo:
http://www.guj.com.br/article.show.logic?id=11

Abraço,

Visite o Blog do Perereca: http://www.blogdoperereca.blogspot.com

[quote=rodrigo.ferreira]Bom dia!!!

É possível fazer utilizando Struts sim… é possível fazer com qualquer tecnologia web (Struts/JSF/Spring MVC etc.)

O filtro é chamado entre todas as solicitações, o Struts não sabe que o filtro existe, nem o filtro sabe do Struts… aí no filtro você deve redirecionar para o “.do” adequado.

Estude este artigo:
http://www.guj.com.br/article.show.logic?id=11

Abraço,

Visite o Blog do Perereca: http://www.blogdoperereca.blogspot.com

[/quote]

Olá rodrigo, bom dia.

Estou com uma dúvida na implementação de sistema de login com validação usando filter. Estou usando o eclipse, hibernate e o banco em postgresql. Eu quero que o usuario só tenha acesso as jsp’s através da tela de login, ou seja, depois que estiver autenticado. Mas infelizmente, se ele acessar atraves da Url, ele consegue iniciar uma session.
Tem idéia de como eu posso evitar isso??

Segue minha classe hibernate e minha classe loginhandler.
Agradeço pela colaboração.

HibernateSessionFilter

[code]package br.gov.rr.setrabes.util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HibernateSessionFilter implements Filter {

public void doFilter(ServletRequest req, ServletResponse res, FilterChain fc)
		throws IOException, ServletException {

	HibernateUtil.openSession();
	try {
		HibernateUtil.currentSession().beginTransaction();
		fc.doFilter(req, res);
		HibernateUtil.currentSession().getTransaction().commit();
	} catch (Exception e) {
		throw new ServletException(e);
	} finally {
		HibernateUtil.closeCurrentSession();
	}
}

public void init(FilterConfig c) {
}

public void destroy() {
}

} [/code]

A classe LoginHandler:

[code]package br.gov.rr.setrabes.handler;

import java.util.List;

import org.hibernate.Session;

import br.gov.rr.setrabes.dao.Dao;
import br.gov.rr.setrabes.dao.LoginDAO;
import br.gov.rr.setrabes.estrutura.Login;
import br.gov.rr.setrabes.estrutura.Usuario;
import br.gov.rr.setrabes.util.HibernateUtil;

public class LoginHandler {

private LoginDAO loginDAO = new LoginDAO();

/** Creates a new instance of ControleLogin */
public LoginHandler() {

}

private Login LO = new Login();

// 
public Login getLO() {
	return LO;
}

public void setLO(Login LO) {
	this.LO = LO;
}

public String login() {
	System.out.println("login= " + LO.getLogin());
	System.out.println("senha= " + LO.getSenha());

	// //poe booleano na sessao
	// HttpSession session = session.setAttribute();

	boolean ok = loginDAO.Login(LO.getLogin(), LO.getSenha(), "1");
	if (ok == true) {
		System.out.println("USUARIO LOGADO COM SUCESSO");
		return "ok";

	}
	boolean admin = loginDAO.Login(LO.getLogin(), LO.getSenha(), "2");
	if (admin == true) {
		System.out.println("ADMIN LOGADO COM SUCESSO");
		return "admin";
	} else
		System.out.println("USUARIO/SENHA INVALIDO");
	return "erro";
}

public List<Usuario> getUsuarios() {
	System.out.println("carregando usuarios ...");
	Session session = HibernateUtil.currentSession();
	Dao<Usuario> dao = new Dao<Usuario>(session, Usuario.class);
	return dao.list();
}

}[/code]