Bom dia a todos!
Estou tentando implementar a parte de login com filter, mas estou esbarrado faz tempo já num problema.
Estou usando JSF 2.1 e Hibernate 3
Se alguém puder dar uma luz ai por favor
Mensagem de Erro:
GRAVE: 'org.hibernate.TransactionException' recebido ao invocar escuta de ação '#{loginBean.login}' para o componente 'loginButton'
GRAVE: org.hibernate.TransactionException: Transaction not successfully started
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:100)
at com.changes.dao.impl.UsuarioDaoImpl.isValidLoginAndPassword(UsuarioDaoImpl.java:40) //O primeiro ele mostra aqui
at com.changes.bean.LoginBean.login(LoginBean.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.el.parser.AstValue.invoke(AstValue.java:254)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
at com.changes.util.AuthFilter.doFilter(AuthFilter.java:59)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:217)
UsuarioDaoImpl
@Override
public boolean isValidLoginAndPassword(String login,String password) {
boolean valid;
Session session = HibernateUtil.getSessionFactory().openSession();
String sql = "select u from Usuario u where username=:user and password=:pass";
Query query = session.createQuery(sql);
query.setString("user", login);
query.setString("pass", password);
Usuario usr = (Usuario) query.uniqueResult();
valid = (usr != null);
session.getTransaction().commit(); //o erro é apontado aqui (já depurei e aqui não aparece nenhum valor...)
session.close();
return valid;
}
LoginBean
@ManagedBean(name="loginBean")
@SessionScoped
public class LoginBean {
private Usuario usuario;
private String user;
private String password;
public LoginBean() {
/*if (this.usuario == null) {
this.usuario = new Usuario();
}*/
}
public String login() {
UsuarioDao usuarioDao = new UsuarioDaoImpl();
if (usuarioDao.isValidLoginAndPassword(user, password)) {
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user", "ok");
return "index.jsf";
} else {
return "reloadError";
}
}
public Usuario getUsuario() {
if (usuario == null){
usuario = new Usuario();
}
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
}
login.xhtml
<p:growl id="growl" showDetail="true" life="3000" />
<p:dialog id="dialog" header="Login" visible="true" closable="false" draggable="false" resizable="false" width="420" widgetVar="dlg">
<h:form>
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel for="username" value="Username: " />
<h:inputText value="#{loginBean.usuario.username}"
id="username" required="true" label="username"/>
<h:outputLabel for="password" value="Password: " />
<h:inputSecret value="#{loginBean.usuario.password}"
id="password" required="true" label="password"/>
<f:facet name="footer">
<p:commandButton id="loginButton" value="Login" update=":growl"
actionListener="#{loginBean.login}"
oncomplete="handleLoginRequest(xhr, status, args)"/>
</f:facet>
</h:panelGrid>
</h:form>
</p:dialog>
Se realmente for ali onde apontei o problema, não estou conseguindo achar o jeito de aparecer um valor valido
Valeu