Incluidas clases para permitir el login de diferentes tipos de usuaario.
* POJO para usuario logeado. * Hash para claves de usuarios * Métodos EJB para login
This commit is contained in:
@@ -11,8 +11,9 @@
|
|||||||
<property name="buildjar" value="${build}/jar" />
|
<property name="buildjar" value="${build}/jar" />
|
||||||
<property name="buildwar" value="${build}/war" />
|
<property name="buildwar" value="${build}/war" />
|
||||||
<property name="dist" value="${source}/dist" />
|
<property name="dist" value="${source}/dist" />
|
||||||
|
<property name="docroot" value="${source}/docroot" />
|
||||||
<property name="jboss-config" value="default" />
|
<property name="jboss-config" value="default" />
|
||||||
<property name="deploy" value="${jboss.home}\standalone\deployments" />
|
<property name="deploy" value="${jboss.home}/standalone/deployments" />
|
||||||
<property name="jboss.module.dir" value="${jboss.home}/modules" />
|
<property name="jboss.module.dir" value="${jboss.home}/modules" />
|
||||||
|
|
||||||
<path id="jboss.classpath">
|
<path id="jboss.classpath">
|
||||||
@@ -20,6 +21,11 @@
|
|||||||
<include name="**/*.jar" />
|
<include name="**/*.jar" />
|
||||||
</fileset>
|
</fileset>
|
||||||
</path>
|
</path>
|
||||||
|
<path id="lib.dir">
|
||||||
|
<fileset dir="${docroot}/WEB-INF/lib">
|
||||||
|
<include name="**/*.jar" />
|
||||||
|
</fileset>
|
||||||
|
</path>
|
||||||
|
|
||||||
<target name="all" depends="clean, init, ear" />
|
<target name="all" depends="clean, init, ear" />
|
||||||
|
|
||||||
@@ -33,6 +39,7 @@
|
|||||||
<mkdir dir="${buildwar}" />
|
<mkdir dir="${buildwar}" />
|
||||||
<mkdir dir="${buildjar}/META-INF" />
|
<mkdir dir="${buildjar}/META-INF" />
|
||||||
<mkdir dir="${buildwar}/WEB-INF" />
|
<mkdir dir="${buildwar}/WEB-INF" />
|
||||||
|
<mkdir dir="${buildwar}/WEB-INF/lib" />
|
||||||
<mkdir dir="${buildwar}/WEB-INF/classes" />
|
<mkdir dir="${buildwar}/WEB-INF/classes" />
|
||||||
<mkdir dir="${dist}" />
|
<mkdir dir="${dist}" />
|
||||||
</target>
|
</target>
|
||||||
@@ -52,13 +59,23 @@
|
|||||||
<!-- Compile the client application, creating the structure buildwar -->
|
<!-- Compile the client application, creating the structure buildwar -->
|
||||||
<target name="compileWar" depends="init">
|
<target name="compileWar" depends="init">
|
||||||
<copy todir="${buildwar}">
|
<copy todir="${buildwar}">
|
||||||
<fileset dir="${source}/docroot" />
|
<fileset dir="${docroot}" />
|
||||||
</copy>
|
</copy>
|
||||||
<javac srcdir="${sourcesrc}" destdir="${buildwar}/WEB-INF/classes" includes="managedbean/*.java" classpathref="jboss.classpath" includeantruntime="true" />
|
<javac srcdir="${sourcesrc}" destdir="${buildwar}/WEB-INF/classes" includes="managedbean/**/*.java" includeantruntime="true">
|
||||||
|
<classpath>
|
||||||
|
<path refid="jboss.classpath" />
|
||||||
|
<path refid="lib.dir" />
|
||||||
|
</classpath>
|
||||||
|
</javac>
|
||||||
<delete verbose="true" dir="${buildwar}/WEB-INF/classes/ejb" />
|
<delete verbose="true" dir="${buildwar}/WEB-INF/classes/ejb" />
|
||||||
<delete verbose="true" dir="${buildwar}/WEB-INF/classes/jpa" />
|
<delete verbose="true" dir="${buildwar}/WEB-INF/classes/jpa" />
|
||||||
<delete verbose="true" dir="${buildwar}/WEB-INF/classes/TO" />
|
<delete verbose="true" dir="${buildwar}/WEB-INF/classes/TO" />
|
||||||
</target>
|
</target>
|
||||||
|
<!-- <war destfile="${build.dir}/CrunchifyRESTJerseyExample.war" webxml="WebContent/WEB-INF/web.xml"> -->
|
||||||
|
<!-- <classes dir="${build.dir}" /> -->
|
||||||
|
<!-- <lib dir="${lib.dir}"> -->
|
||||||
|
<!-- </lib> -->
|
||||||
|
<!-- </war> -->
|
||||||
|
|
||||||
<!-- Update the WAR file and create if not exist -->
|
<!-- Update the WAR file and create if not exist -->
|
||||||
<target name="deployWar" depends="compileWar">
|
<target name="deployWar" depends="compileWar">
|
||||||
@@ -83,10 +100,11 @@
|
|||||||
<fileset dir="${dist}" includes="**/*" />
|
<fileset dir="${dist}" includes="**/*" />
|
||||||
<fileset dir="${build}" includes="**/*" />
|
<fileset dir="${build}" includes="**/*" />
|
||||||
<fileset dir="${buildjar}" includes="**/*" />
|
<fileset dir="${buildjar}" includes="**/*" />
|
||||||
<fileset dir="${buildwar}" includes="**/*" />
|
|
||||||
<fileset dir="${buildjar}/META-INF" includes="**/*" />
|
<fileset dir="${buildjar}/META-INF" includes="**/*" />
|
||||||
<fileset dir="${buildwar}/WEB-INF" includes="**/*" />
|
<fileset dir="${buildwar}/WEB-INF/lib" includes="**/*" />
|
||||||
<fileset dir="${buildwar}/WEB-INF/classes" includes="**/*" />
|
<fileset dir="${buildwar}/WEB-INF/classes" includes="**/*" />
|
||||||
|
<fileset dir="${buildwar}/WEB-INF" includes="**/*" />
|
||||||
|
<fileset dir="${buildwar}" includes="**/*" />
|
||||||
</delete>
|
</delete>
|
||||||
</target>
|
</target>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
62
1.sources/MyHealth/src/TO/LoggedUserTO.java
Normal file
62
1.sources/MyHealth/src/TO/LoggedUserTO.java
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
package TO;
|
||||||
|
|
||||||
|
import managedbean.common.UserType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Marcos García Núñez (mgarcianun@uoc.edu)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class LoggedUserTO {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String password;
|
||||||
|
private String name;
|
||||||
|
private UserType userType;
|
||||||
|
|
||||||
|
public LoggedUserTO() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoggedUserTO(String usrId, String usrName, String usrPwd, UserType usrType) {
|
||||||
|
id = usrId;
|
||||||
|
name = usrName;
|
||||||
|
password = usrPwd;
|
||||||
|
userType = usrType;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserType getUserType() {
|
||||||
|
return userType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserType(UserType userType) {
|
||||||
|
this.userType = userType;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
24
1.sources/MyHealth/src/common/HashUtils.java
Normal file
24
1.sources/MyHealth/src/common/HashUtils.java
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
package common;
|
||||||
|
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
|
||||||
|
import javax.xml.bind.DatatypeConverter;
|
||||||
|
|
||||||
|
public class HashUtils {
|
||||||
|
|
||||||
|
public static String hashMD5(String stringValue) {
|
||||||
|
byte[] digest = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
MessageDigest md = MessageDigest.getInstance("MD5");
|
||||||
|
md.update(stringValue.getBytes());
|
||||||
|
digest = md.digest();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
// TODO: Register exception to log.
|
||||||
|
}
|
||||||
|
|
||||||
|
return (DatatypeConverter.printHexBinary(digest).toUpperCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -9,6 +9,7 @@ import TO.MedicalSpecialtyTO;
|
|||||||
import TO.PatientTO;
|
import TO.PatientTO;
|
||||||
import TO.PrimaryHealthCareCenterTO;
|
import TO.PrimaryHealthCareCenterTO;
|
||||||
import TO.SpecialistDoctorTO;
|
import TO.SpecialistDoctorTO;
|
||||||
|
import common.HashUtils;
|
||||||
import jpa.FamilyDoctorJPA;
|
import jpa.FamilyDoctorJPA;
|
||||||
import jpa.MedicalSpecialtyJPA;
|
import jpa.MedicalSpecialtyJPA;
|
||||||
import jpa.PatientJPA;
|
import jpa.PatientJPA;
|
||||||
@@ -45,7 +46,7 @@ public class ProfileFacadeBean implements ProfileFacadeRemote {
|
|||||||
public PatientTO registerPatient(Integer id, String nif, String name, String surname, String password, String email) {
|
public PatientTO registerPatient(Integer id, String nif, String name, String surname, String password, String email) {
|
||||||
PatientTO paTO = null;
|
PatientTO paTO = null;
|
||||||
|
|
||||||
PatientJPA ms = new PatientJPA(id, nif, name, surname, password, email);
|
PatientJPA ms = new PatientJPA(id, nif, name, surname, HashUtils.hashMD5(password), email);
|
||||||
entman.persist(ms);
|
entman.persist(ms);
|
||||||
paTO = new PatientTO(ms.getId(), ms.getNif(), ms.getName(), ms.getSurname(), ms.getPassword(), ms.getEmail());
|
paTO = new PatientTO(ms.getId(), ms.getNif(), ms.getName(), ms.getSurname(), ms.getPassword(), ms.getEmail());
|
||||||
|
|
||||||
@@ -59,7 +60,7 @@ public class ProfileFacadeBean implements ProfileFacadeRemote {
|
|||||||
|
|
||||||
// TODO: Lanzar error si no se encuentra la especialidad.
|
// TODO: Lanzar error si no se encuentra la especialidad.
|
||||||
if (ms != null) {
|
if (ms != null) {
|
||||||
SpecialistDoctorJPA sd = new SpecialistDoctorJPA(id, nif, name, surname, password, email);
|
SpecialistDoctorJPA sd = new SpecialistDoctorJPA(id, nif, name, surname, HashUtils.hashMD5(password), email);
|
||||||
entman.persist(sd);
|
entman.persist(sd);
|
||||||
sdTO = new SpecialistDoctorTO(sd.getId(), sd.getNif(), sd.getName(), sd.getSurname(), sd.getPassword(), sd.getEmail());
|
sdTO = new SpecialistDoctorTO(sd.getId(), sd.getNif(), sd.getName(), sd.getSurname(), sd.getPassword(), sd.getEmail());
|
||||||
}
|
}
|
||||||
@@ -75,7 +76,7 @@ public class ProfileFacadeBean implements ProfileFacadeRemote {
|
|||||||
// TODO: Lanzar error si no encontramos el cap!!!!!
|
// TODO: Lanzar error si no encontramos el cap!!!!!
|
||||||
if (phcC != null) {
|
if (phcC != null) {
|
||||||
|
|
||||||
FamilyDoctorJPA fd = new FamilyDoctorJPA(id, nif, name, surname, password, email);
|
FamilyDoctorJPA fd = new FamilyDoctorJPA(id, nif, name, surname, HashUtils.hashMD5(password), email);
|
||||||
fd.setPrimaryHealthCareCenter(phcC);
|
fd.setPrimaryHealthCareCenter(phcC);
|
||||||
|
|
||||||
entman.persist(fd);
|
entman.persist(fd);
|
||||||
@@ -94,7 +95,7 @@ public class ProfileFacadeBean implements ProfileFacadeRemote {
|
|||||||
fd.setNif(nif);
|
fd.setNif(nif);
|
||||||
fd.setName(name);
|
fd.setName(name);
|
||||||
fd.setSurname(surname);
|
fd.setSurname(surname);
|
||||||
fd.setPassword(password);
|
fd.setPassword(HashUtils.hashMD5(password));
|
||||||
fd.setEmail(email);
|
fd.setEmail(email);
|
||||||
|
|
||||||
entman.persist(fd);
|
entman.persist(fd);
|
||||||
@@ -117,7 +118,7 @@ public class ProfileFacadeBean implements ProfileFacadeRemote {
|
|||||||
sd.setNif(nif);
|
sd.setNif(nif);
|
||||||
sd.setName(name);
|
sd.setName(name);
|
||||||
sd.setSurname(surname);
|
sd.setSurname(surname);
|
||||||
sd.setPassword(password);
|
sd.setPassword(HashUtils.hashMD5(password));
|
||||||
sd.setEmail(email);
|
sd.setEmail(email);
|
||||||
sd.setMedicalSpecialty(ms);
|
sd.setMedicalSpecialty(ms);
|
||||||
|
|
||||||
@@ -137,7 +138,7 @@ public class ProfileFacadeBean implements ProfileFacadeRemote {
|
|||||||
fd.setNif(nif);
|
fd.setNif(nif);
|
||||||
fd.setName(name);
|
fd.setName(name);
|
||||||
fd.setSurname(surname);
|
fd.setSurname(surname);
|
||||||
fd.setPassword(password);
|
fd.setPassword(HashUtils.hashMD5(password));
|
||||||
fd.setEmail(email);
|
fd.setEmail(email);
|
||||||
|
|
||||||
// TODO: Es posible actualizar el cap? ¿No debería utilizar el método
|
// TODO: Es posible actualizar el cap? ¿No debería utilizar el método
|
||||||
|
|||||||
@@ -8,10 +8,17 @@ import javax.persistence.EntityManager;
|
|||||||
import javax.persistence.PersistenceContext;
|
import javax.persistence.PersistenceContext;
|
||||||
import javax.persistence.Query;
|
import javax.persistence.Query;
|
||||||
|
|
||||||
|
import TO.LoggedUserTO;
|
||||||
import TO.MedicalSpecialtyTO;
|
import TO.MedicalSpecialtyTO;
|
||||||
import TO.PrimaryHealthCareCenterTO;
|
import TO.PrimaryHealthCareCenterTO;
|
||||||
|
import common.HashUtils;
|
||||||
|
import jpa.AdministratorJPA;
|
||||||
|
import jpa.FamilyDoctorJPA;
|
||||||
import jpa.MedicalSpecialtyJPA;
|
import jpa.MedicalSpecialtyJPA;
|
||||||
|
import jpa.PatientJPA;
|
||||||
import jpa.PrimaryHealthCareCenterJPA;
|
import jpa.PrimaryHealthCareCenterJPA;
|
||||||
|
import jpa.SpecialistDoctorJPA;
|
||||||
|
import managedbean.common.UserType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EJB Session Bean Class para la Practica 2, Ejercicio 1 (ISCSD) Implementa los
|
* EJB Session Bean Class para la Practica 2, Ejercicio 1 (ISCSD) Implementa los
|
||||||
@@ -83,4 +90,44 @@ public class SystemAdminFacadeBean implements SystemAdminFacadeRemote {
|
|||||||
|
|
||||||
return allCAPs;
|
return allCAPs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LoggedUserTO login(String id, String pwd) {
|
||||||
|
LoggedUserTO usr = null;
|
||||||
|
|
||||||
|
// First try to login as Admin
|
||||||
|
AdministratorJPA adm = entman.find(AdministratorJPA.class, id);
|
||||||
|
if (adm != null) {
|
||||||
|
usr = new LoggedUserTO(adm.getEmail(), "", adm.getPassword(), UserType.ADMINISTRADOR);
|
||||||
|
} else {
|
||||||
|
Integer iId = Integer.valueOf(id);
|
||||||
|
// Try to login Patient
|
||||||
|
PatientJPA pat = entman.find(PatientJPA.class, iId);
|
||||||
|
|
||||||
|
if (pat != null) {
|
||||||
|
usr = new LoggedUserTO(pat.getId().toString(), pat.getName(), pat.getPassword(), UserType.PATIENT);
|
||||||
|
} else {
|
||||||
|
FamilyDoctorJPA fdoc = entman.find(FamilyDoctorJPA.class, iId);
|
||||||
|
|
||||||
|
if (fdoc != null) {
|
||||||
|
usr = new LoggedUserTO(fdoc.getId().toString(), fdoc.getName(), fdoc.getPassword(), UserType.FAMILY_DOCTOR);
|
||||||
|
} else {
|
||||||
|
SpecialistDoctorJPA sdoc = entman.find(SpecialistDoctorJPA.class, iId);
|
||||||
|
|
||||||
|
if (sdoc != null) {
|
||||||
|
usr = new LoggedUserTO(sdoc.getId().toString(), sdoc.getName(), sdoc.getPassword(), UserType.SPECIALIST_DOCTOR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (usr != null) {
|
||||||
|
// Comprobamos el password
|
||||||
|
if (usr.getPassword().equals(HashUtils.hashMD5(pwd)) == false) {
|
||||||
|
// Bad Password, devolvemos null!
|
||||||
|
usr = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return usr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import javax.ejb.Remote;
|
|||||||
|
|
||||||
import TO.MedicalSpecialtyTO;
|
import TO.MedicalSpecialtyTO;
|
||||||
import TO.PrimaryHealthCareCenterTO;
|
import TO.PrimaryHealthCareCenterTO;
|
||||||
|
import TO.LoggedUserTO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interfaz remota del EJB Definimos los métodos que estarán disponibles para
|
* Interfaz remota del EJB Definimos los métodos que estarán disponibles para
|
||||||
@@ -21,4 +22,5 @@ public interface SystemAdminFacadeRemote {
|
|||||||
*/
|
*/
|
||||||
public Collection<MedicalSpecialtyTO> listAllMedicalSpecialities();
|
public Collection<MedicalSpecialtyTO> listAllMedicalSpecialities();
|
||||||
public Collection<PrimaryHealthCareCenterTO> listAllCAPs();
|
public Collection<PrimaryHealthCareCenterTO> listAllCAPs();
|
||||||
|
public LoggedUserTO login(String id, String pwd);
|
||||||
}
|
}
|
||||||
52
1.sources/MyHealth/src/jpa/AdministratorJPA.java
Normal file
52
1.sources/MyHealth/src/jpa/AdministratorJPA.java
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
package jpa;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Marcos García Núñez (mgarcianun@uoc.edu)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
@Table(name = "MyHealth.Administrator")
|
||||||
|
public class AdministratorJPA implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
@Id
|
||||||
|
private String email;
|
||||||
|
private String password;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class constructor methods
|
||||||
|
*/
|
||||||
|
public AdministratorJPA() {
|
||||||
|
super();
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdministratorJPA(String email, String password) {
|
||||||
|
this.email = email;
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPassword(String password) {
|
||||||
|
this.password = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEmail() {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEmail(String email) {
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -124,5 +124,3 @@ public class FamilyDoctorJPA implements Serializable {
|
|||||||
this.primaryHealthCareCenter = center;
|
this.primaryHealthCareCenter = center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user