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;
}
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";
}
}
<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>
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();
}
}
}
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...