Problema session Hibernate Login JSF

0 respostas
S

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:
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; 
	}
MB:
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";
        }
    }
XHTML:
<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>
Filter:
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();
            }
        }
    }
A saída é a seguinte:
face > metodo doLogin() > session.isOpen() >>> true INFO - ConstrutorSessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]]) face > loginEmail >>>>>> [email removido] 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!!

Valew...

Criado 18 de março de 2009
Respostas 0
Participantes 1