Problema session Hibernate Login JSF

Olá pessoal,

seguinte… estou com um probleminha no meu Login do sistema. Pelo que entendi é problema de session do Hibernate.

Segue o código relevante:
DAO: [code]public class PessoaDAO {

private Session session;

private Logger logger = Logger.getLogger(PessoaDAO.class);

public PessoaDAO(Session session) {
	logger.info("Construtor" + session);
	this.session = session;
}

public boolean isValidLoginAndPassword(String loginEmail, String password){
	boolean valid = false;
	
	System.out.println("DAO metodo isValidLoginAndPassword...");
	
	System.out.println("DAO session.isOpen() >>> " + session.isOpen());
	
	Query query = session.createQuery("from Pessoa pessoa where pessoa.loginEmail = :le and pessoa.password = :pw");
	query.setString("le", loginEmail);
	query.setString("pw",  password);
	Pessoa pessoa = (Pessoa) query.uniqueResult();

	if(pessoa != null){
		valid = true;
	}
	System.out.println("DAO Pessoa >>> " + pessoa);
		
	session.getTransaction().commit();
	session.close();
	
	return valid; 
}[/code]

MB: [code]public class PessoaFace {

private Pessoa pessoa = new Pessoa();

private String senha;

private String loginEmail; 

private String nome;

private Long selectedId;

public String doLogin() throws Exception {
    boolean logado = false;
    
    Session session = HibernateUtil.currentSession();
    
    System.out.println("face > metodo doLogin() > session.isOpen() >>> " + session.isOpen());
    
    PessoaDAO pessoaDAO = new PessoaDAO(session);
            
    HttpSession ses = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
    HttpServletResponse rp = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    
    System.out.println("face > loginEmail >>>>>> " + this.loginEmail);
    System.out.println("face > senha >>>>>> " + this.senha);

    logado = pessoaDAO.isValidLoginAndPassword(this.loginEmail, TransformaStringMD5.md5(senha));

    if(logado){
        ses.setAttribute("user", logado);
        rp.sendRedirect("http://localhost:8080/sistema/principal/principal.faces");

        return "toPrincipal";
    }else{
        ses.setAttribute("user", null);
        ses.removeAttribute("user");
        rp.sendRedirect("http://localhost:8080/sistema/login/login.faces");
        return "toLogin";
    }
}[/code]

XHTML: [code]<h:panelGrid columns=“2”>
<h:outputText value=“Login” styleClass=“rotulos” />
<h:inputText id=“login” value="#{pessoaFace.loginEmail}" required=“true” styleClass=“edit” size=“90” style=" width : 150px;"/>

				<h:outputLabel for="senha" value="Senha " styleClass="rotulos"/>
				<h:inputSecret id="senha" styleClass="edit" validatorMessage="A senha deve ter no mínimo 6 caracteres!" value="#{pessoaFace.senha}" size="60" style=" width : 150px;">
					<f:validateLength minimum="6"/>
				</h:inputSecret>
				
				<h:commandButton id="botao" value="Entrar" action="#{pessoaFace.doLogin}" />
				<h:message for="login"/>
				<h:message for="senha"/>
		</h:panelGrid>[/code]

Filter: [code]public class AuthFilter implements Filter {

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest rq = (HttpServletRequest) request;
    HttpServletResponse rp = (HttpServletResponse) response;
    boolean auth = rq.getSession().getAttribute("user") != null;
   
    if (!auth && !rq.getRequestURL().toString().contains("login.jsf")) {
        rp.sendRedirect("http://localhost:8080/sistema/pages/principal/principal.jsf");
    } else {

        try {
            chain.doFilter(request, response);
        } catch (Exception e) {
            System.out.println("Exception no chain.doFilter");
            e.printStackTrace();
        }
    }
}[/code]A saída é a seguinte: [quote]face > metodo doLogin() > session.isOpen() >>> true

INFO - ConstrutorSessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])
face > loginEmail >>>>>> sergio.lnd.fantin@gmail.com
face > senha >>>>>> 123456
DAO metodo isValidLoginAndPassword…
DAO session.isOpen() >>> true
DAO Pessoa >>> Pessoa Fisica >>> Sérgio Fantin
Exception no chain.doFilter
org.hibernate.SessionException: Session was already closed
at org.hibernate.impl.SessionImpl.close(SessionImpl.java:302)
at br.com.sistema.dao.HibernateUtil.closeCurrentSession(HibernateUtil.java:30)
at br.com.sistema.filter.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:26)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.com.sistema.filter.AuthFilter.doFilter(AuthFilter.java:26)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
ERROR - There was a session for this thread already!![/quote]

Valew…