public interface FrondEndLogin {
public boolean registerLogin(Session session, Login login) throws Exception;
public Login updateLogin (int id) throws Exception;
public Login deleteLogin (int id) throws Exception;
public Login getByUserName(Session session, String name) throws Exception;
}
Modificamos el login Dao
public class loginDAO implements FrondEndLogin{
private Session session;
@Override
public boolean registerLogin(Session session, Login login) throws Exception {
session.save(login);//guardar los datos
return true;
}
@Override
public Login updateLogin(int id) throws Exception {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Login deleteLogin(int id) throws Exception {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}
@Override
public Login getByUserName(Session session, String name) throws Exception {
//creamos la sentencia HQL ojo no es lo mismo que SQL en el post lo explicare mas a fondo
String hql = "from Login where user=:user";
//creamos el query donde lo inicializamos con el session
Query query = session.createQuery(hql);
//agregamos al query el parametro de la consulta que se recibira desde el id que se le envie del Bean al DAO es la forma mas segura
//para prevenir inyeccion sql
query.setParameter("user", name);
//pasamos a la consulta para ello instanciaremos el objeto Usuarios con el query dond solo obtendra un unico resultado
Login login = (Login) query.uniqueResult();
//retornamos
return login;
}
}
Para este caso crearemos un nuevo ManagedBean y debe quedar como el siguiente al cual implementamos 2 métodos el de iniciar sesión y cerrar sesión:
@ManagedBean
@SessionScoped
public class ManagedBeanSesionLogin implements Serializable{
private String userName;
private String userPass;
private Login login;
private Session session;
private Transaction transaction;
public ManagedBeanSesionLogin() {
}
public String beginSession(){
/*inicializamos para asegurarnos*/
session = null;
transaction = null;
try {
/*instanciamos los objetos*/
loginDAO daoLogin = new loginDAO();
//abrimos sesion de conexcion
session = HibernateUtil.getSessionFactory().openSession();
//creamos la transaccion y la comenzamos
transaction = session.beginTransaction();
//intanciamos el objeto
Login login = daoLogin.getByUserName(session, userName);
//valida si es que existe el usuario
if(login != null){
//valida que la contraseña sea la misma
if(login.getPass().equals(Encrypting.encrypting(userPass))){
//si todo es valido manda a la pagina
return "/User/viewAll";
}
}
transaction.commit();//cerrar transaccion
userName = null;
userPass = null;
//mandar mensaje de error de datos
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error de Acceso", "Datos Incorecctos"));
//retornar
RequestContext.getCurrentInstance().execute("cleanForm('loginForm')");
return "/home";
} catch (Exception e) {
//verificamos sino hay ya una transaccion ya definida
if(transaction != null){
//si lo hay haremos que todo se revierta en la BD y que como estaba antes de utilizar este metodo
transaction.rollback();
}
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Error Fatal", "Contacte con su administrador "+e.getMessage()));
login = new Login();
return null;
}finally{
//verificamos sino hay ya una session ya definida
if(session != null){
//si lo hay cerramos la session
session.close();
}
}
}
public String closeSession() {
userName = null;
userPass = null;
return "/home";
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
}
creamos en nuestra pagina que tengamos como inicio o index el formulario y es el siguiente en la parte del content del template:
<h:form id="loginForm">
<p:growl id="growl" sticky="true" showDetail="true" life="3000" />
<p:dialog header="Iniciar Sesion INEE" modal="true" widgetVar="dlg" resizable="false" showEffect="explode" showHeader="explode">
<h:panelGrid columns="2" cellpadding="5">
<h:outputLabel for="username" value="Username:"/>
<p:inputText id="username" value="#{managedBeanSesionLogin.userName}" placeholder="Nombre de Usuario" required="true" label="username">
<f:validator validatorId="ValidateEmptyFields"/>
</p:inputText>
<h:outputLabel for="password" value="Password:" />
<p:password id="password" value="#{managedBeanSesionLogin.userPass}" placeholder="Contraseña de Usuario" required="true" label="password" />
<f:facet name="footer">
<center><p:commandButton value="Iniciar" action="#{managedBeanSesionLogin.beginSession()}" update="loginForm"/></center>
</f:facet>
</h:panelGrid>
</p:dialog>
</h:form>
Y en la parte top del template agregamos la siguiente linea:
<h:outputLink value="javascript:void(0)" onclick="PF('dlg').show();" title="login">
<p:outputLabel id="label1" value="Iniciar Sesion" style="color: white;"/>
</h:outputLink>
Entonces la pagina de inicio en mi proyecto es el siguiente obviamente aun es un diseño asi que falta para implementar pero solo es para mostrar, mas bien seria lo que llevamos hasta el momento de acuerdo:
buenas noches. una pregunta. si yo quiero crear 2 sesiones diferentes. una para usuarios, y otra para administrador como seria en este caso ??
ResponderEliminar