diff --git a/src/main/java/com/stock/dao/UsuarioDAO.java b/src/main/java/com/stock/dao/UsuarioDAO.java
index 1108093085f99657a9f8db7c7e26f0a716491cc1..d252c5529d34dd3a5287a1a88214cb3fcc0629d6 100644
--- a/src/main/java/com/stock/dao/UsuarioDAO.java
+++ b/src/main/java/com/stock/dao/UsuarioDAO.java
@@ -8,6 +8,7 @@ public interface UsuarioDAO extends GenericDAO<Usuario>{
 
 	Usuario obtenerPorNombre(String nombre);
 	
-	// No lo puedo poner acá si tiene static en Impl
+	Usuario obtenerPorUsuario(String user);
+	
 	boolean validar(String user, String password);
 }
diff --git a/src/main/java/com/stock/dao/UsuarioDAOImpl.java b/src/main/java/com/stock/dao/UsuarioDAOImpl.java
index 76e5fb3859ea71509cfdc05aa81c9c89daafd648..fd364560f33329849184c4bbc6aec9f00f1893a0 100644
--- a/src/main/java/com/stock/dao/UsuarioDAOImpl.java
+++ b/src/main/java/com/stock/dao/UsuarioDAOImpl.java
@@ -32,6 +32,36 @@ public class UsuarioDAOImpl extends GenericDAOImpl<Usuario> implements UsuarioDA
 		    }
 		} catch (Exception e) {
 		    e.printStackTrace();
+		    return null;
+		} finally {
+		    // Cerrar el EntityManager
+		    //em.close();
+		}
+		return obj;
+	}
+	
+	@Override
+	public Usuario obtenerPorUsuario(String user) {
+		// TODO Auto-generated method stub
+		EntityManager em = SingletonManFact.getInstance();
+		EntityTransaction transaction = em.getTransaction();
+		Usuario obj = null;
+		
+		try {
+			//obj = em.find(this.clase, objId);
+			//TypedQuery<Usuario> query = em.createQuery("SELECT u FROM Usuario u WHERE usuario.usuario = :user", Usuario.class);
+			TypedQuery<Usuario> query = em.createQuery("FROM Usuario WHERE usuario.usuario = :user", Usuario.class);
+			//TypedQuery<Usuario> query = em.createQuery("FROM Usuario WHERE usuario.usuario = :user", user);
+			query.setParameter("user", user);
+	        //List<T> obj = query.getResultList().get(0);
+			obj = query.getSingleResult();
+			
+			if (obj == null) {
+		        System.out.println("No se encontró ningún elemento con el nombre de usuario " + user);
+		    }
+		} catch (Exception e) {
+		    e.printStackTrace();
+		    return null;
 		} finally {
 		    // Cerrar el EntityManager
 		    //em.close();
@@ -39,8 +69,18 @@ public class UsuarioDAOImpl extends GenericDAOImpl<Usuario> implements UsuarioDA
 		return obj;
 	}
 	
-	//static?
 	public boolean validar(String user, String password) {
-		return (user.equals("admin") && password.equals("admin"));
+		Usuario userAuth = obtenerPorUsuario(user);
+		if(userAuth == null || userAuth.getValid() == false) {
+			System.out.print("El usuario no existe\n");
+			return false;
+		}
+		/*System.out.print("Nombre del usuario: " + userAuth.getNombre() + "\n");
+		if (user.equals(userAuth.getUsuario()) && password.equals(userAuth.getContraseña())) {
+			System.out.print("Login exitoso\n");
+		} else {
+			System.out.print("La contraseña no coincide\n");
+		}*/
+		return (user.equals(userAuth.getUsuario()) && password.equals(userAuth.getContraseña()));
 	}
 }
diff --git a/src/main/java/com/stock/model/Base.java b/src/main/java/com/stock/model/Base.java
index c8f5597b34def9fba773a9f668be53fbbf3e746e..d549d24150c840192ec41ed2a1c12145b8dcbbc3 100644
--- a/src/main/java/com/stock/model/Base.java
+++ b/src/main/java/com/stock/model/Base.java
@@ -16,12 +16,20 @@ public abstract class Base {
 	@ColumnDefault("1")
 	boolean valid;
 	
+	public Long getId() {
+		return id;
+	}
+	
 	public void setId(Long id) {
 		this.id = id;
 	}
 	
-	public Long getId() {
-		return id;
+	public boolean getValid() {
+		return valid;
+	}
+	
+	public void setValid(boolean valid) {
+		this.valid = valid;
 	}
 	
 	public Base(){}
diff --git a/src/main/java/com/stock/model/Usuario.java b/src/main/java/com/stock/model/Usuario.java
index 947fb48c6eb6f4831f43e363680863740d68effe..082715464c32738819e497487509b3cd242531fc 100644
--- a/src/main/java/com/stock/model/Usuario.java
+++ b/src/main/java/com/stock/model/Usuario.java
@@ -6,8 +6,10 @@ import java.util.List;
 
 import javax.persistence.*;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
+@Cacheable(false)
 @Entity
 //@JsonIgnoreProperties
 @Table(name="USUARIO")
@@ -35,6 +37,7 @@ public class Usuario extends Base {
 	private String apellido;
 	
 	@Column(name = "ICORPORACION")
+	//@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
 	private Date incorp;
 	
 	@OneToMany(mappedBy = "usuario")
@@ -62,13 +65,6 @@ public class Usuario extends Base {
 		//this.valid = true;
 	}
 	
-//	public Long getId() {
-//		return id;
-//	}
-//	public void setId(Long id) {
-//		this.id = id;
-//	}
-	
 	public int getDni() {
 		return dni;
 	}
@@ -122,6 +118,9 @@ public class Usuario extends Base {
 	public Date getIncorp() {
 		return incorp;
 	}
+	public void setIncorp(Date incorp) {
+		this.incorp = incorp;
+	}
 
 	public List<ProductoTerminado> getProdTermi() {
 		return prodTermi;
diff --git a/src/main/java/com/stock/resources/FamProdResource.java b/src/main/java/com/stock/resources/FamProdResource.java
index e321f0f1ec83f71fea52df3097011b44bd586b16..dff20269e77099b1fca2c2900afe0f754f232b84 100644
--- a/src/main/java/com/stock/resources/FamProdResource.java
+++ b/src/main/java/com/stock/resources/FamProdResource.java
@@ -42,6 +42,7 @@ public class FamProdResource {
 	@Produces(MediaType.APPLICATION_JSON)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response guardar(FamProd obj) {
+		System.out.print(obj);
 		try {
 			objdao.guardar(obj);
 			return Response.ok().build();
diff --git a/src/main/java/com/stock/resources/Filtro.java b/src/main/java/com/stock/resources/Filtro.java
new file mode 100644
index 0000000000000000000000000000000000000000..503b1ff6ceecc4f256c0b584c896b7d0a4b98ac2
--- /dev/null
+++ b/src/main/java/com/stock/resources/Filtro.java
@@ -0,0 +1,44 @@
+package com.stock.resources;
+
+import java.io.IOException;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+//import jakarta.servlet.annotation.WebFilter;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+
+public class Filtro implements Filter {
+
+    /**
+     * Default constructor. 
+     */
+    public Filtro() {
+        // TODO Auto-generated constructor stub
+    }
+
+	@Override
+	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+		
+	    HttpServletResponse res = (HttpServletResponse) response;
+	    HttpServletRequest req = (HttpServletRequest) request;
+
+	    res.addHeader("Access-Control-Allow-Origin", "*");
+	    res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS");
+	    res.addHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
+	    res.addHeader("Access-Control-Allow-Credentials", "true");
+
+	    chain.doFilter(request, res);
+	  }
+
+	@Override
+	public void destroy() {}
+
+	@Override
+	public void init(FilterConfig fConfig) throws ServletException {}
+
+}
diff --git a/src/main/java/com/stock/resources/LoginServicio.java b/src/main/java/com/stock/resources/LoginServicio.java
index efa9ff8bcd3d3bfe01c1f4c99155f53e47464679..be69b0a4e615ae5061718c2babca7b8bd225c5d2 100644
--- a/src/main/java/com/stock/resources/LoginServicio.java
+++ b/src/main/java/com/stock/resources/LoginServicio.java
@@ -45,6 +45,8 @@ public class LoginServicio {
 	@Produces(MediaType.APPLICATION_JSON)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response validar(Usuario usuario) {
+		// El mensaje no incluye el atributo valid del usuario, por lo que siempre llegará como false y dará un Bad Request
+		// && usuario.getValid()
 		if(usuario != null && usuario.getUsuario() != null && usuario.getContraseña() != null) {
 			boolean status = userdao.validar(usuario.getUsuario(), usuario.getContraseña());
 			//SignatureAlgorithm signAlg = SignatureAlgorithm.HS256;
diff --git a/src/main/java/com/stock/resources/MateriaPrimaResource.java b/src/main/java/com/stock/resources/MateriaPrimaResource.java
index 7dd3c0131bb9aa1ac87f91274c7785b462c8e317..f39f41321b3d7c0fca54322cf928f1a6756c3e18 100644
--- a/src/main/java/com/stock/resources/MateriaPrimaResource.java
+++ b/src/main/java/com/stock/resources/MateriaPrimaResource.java
@@ -44,6 +44,7 @@ public class MateriaPrimaResource {
 	@Produces(MediaType.APPLICATION_JSON)
 	@Consumes(MediaType.APPLICATION_JSON)
 	public Response guardar(MateriaPrima obj) {
+		System.out.print(obj);
 		try {
 			objdao.guardar(obj);
 			return Response.ok().build();
diff --git a/src/main/java/com/stock/resources/UsuariosResource.java b/src/main/java/com/stock/resources/UsuariosResource.java
index ca7d4745a5a83a7fe872fb7af2afacb0f33795ca..3a7d5c151b07cccc024f065666cb335721ddd061 100644
--- a/src/main/java/com/stock/resources/UsuariosResource.java
+++ b/src/main/java/com/stock/resources/UsuariosResource.java
@@ -63,7 +63,7 @@ public class UsuariosResource {
 	public Response editar(Usuario obj){
 		Usuario aux = objdao.obtenerPorId(obj.getId());
 		if (aux != null){
-			objdao.actualizar(obj);;
+			objdao.actualizar(obj);
 			return Response.ok().entity(obj).build();
 		} else {
 			return Response.status(Response.Status.NOT_FOUND).entity("[]").build();
diff --git a/src/main/java/com/stock/singleton/SingletonManFact.java b/src/main/java/com/stock/singleton/SingletonManFact.java
index e6a20505452c54df497e155bb6c3f408d4d8350d..a113ba981dc91e0d778333f527959d0fc2fb5b46 100644
--- a/src/main/java/com/stock/singleton/SingletonManFact.java
+++ b/src/main/java/com/stock/singleton/SingletonManFact.java
@@ -17,7 +17,6 @@ public class SingletonManFact {
             emf = Persistence.createEntityManagerFactory("miUP");
             em = emf.createEntityManager();
         }
-        
         return em;
     }
     
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
index 57eb69a494eb8b663d14a7d7ca6b824c9b37194a..b7d534179b92250b5ab7eb24c503ecf999efb3aa 100644
--- a/src/main/resources/META-INF/persistence.xml
+++ b/src/main/resources/META-INF/persistence.xml
@@ -12,6 +12,9 @@
 		<property name="javax.persistence.jdbc.user" value="root"/>
 		<property name="javax.persistence.jdbc.password" value="root"/>
 		<property name="javax.persistence.schema-generation.database.action" value="create"/>
+		
+		<property name="hibernate.cache.use_second_level_cache" value="false"/>
+   		<property name="hibernate.cache.use_query_cache" value="false"/>
 <!-- 		<property name="hibernate.hbm2ddl.auto" value="update"/> -->
     </properties>
   </persistence-unit>
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 94380526a012f5a5762b489f7609418c995ab2bc..665107590c5f0d07d2955cdb0d4d868106cb40b4 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -20,6 +20,15 @@
 	</servlet-mapping>
 
 	<filter>
+		<filter-name>Filtro</filter-name>
+		<filter-class>com.stock.resources.Filtro</filter-class>
+	</filter>
+	<filter-mapping>
+		<filter-name>Filtro</filter-name>
+		<url-pattern>/rest/*</url-pattern>
+	</filter-mapping>
+
+	<!-- filter>
 		<filter-name>CorsFilter</filter-name>
 		<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
 		<init-param>
@@ -50,7 +59,8 @@
 	<filter-mapping>
 		<filter-name>CorsFilter</filter-name>
 		<url-pattern>/*</url-pattern>
-	</filter-mapping>
+	</filter-mapping -->
+	
 		<!-- servlet> <servlet-name>OpenApi</servlet-name> <servlet-class>io.swagger.v3.jaxrs2.integration.OpenApiServlet</servlet-class> 
 			<init-param> <param-name>openApi.configuration.resourcePackages</param-name> 
 			<param-value>com.stock.resources</param-value> </init-param> <load-on-startup>2</load-on-startup>