diff --git a/src/main/java/com/qsoft/wmp/filter/CorsFilter.java b/src/main/java/com/qsoft/wmp/filter/CorsFilter.java index 834c842..bc905f3 100644 --- a/src/main/java/com/qsoft/wmp/filter/CorsFilter.java +++ b/src/main/java/com/qsoft/wmp/filter/CorsFilter.java @@ -15,11 +15,6 @@ import javax.ws.rs.container.ContainerResponseFilter; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.Provider; -/** - * See http://www.w3.org/TR/cors/ - * - * @author airhacks.com - */ @Provider @Priority(Priorities.HEADER_DECORATOR) public class CorsFilter implements ContainerResponseFilter { diff --git a/src/main/java/com/qsoft/wmp/services/rest/AccionResource.java b/src/main/java/com/qsoft/wmp/services/rest/AccionResource.java index 8d9158f..30bf7ce 100644 --- a/src/main/java/com/qsoft/wmp/services/rest/AccionResource.java +++ b/src/main/java/com/qsoft/wmp/services/rest/AccionResource.java @@ -12,17 +12,21 @@ import com.qsoft.erp.constantes.DominioConstantes; import com.qsoft.erp.constantes.EntidadEnum; import com.qsoft.erp.dominio.AccionGenerica; import com.qsoft.erp.dominio.exception.DominioExcepcion; +import com.qsoft.erp.dominio.util.AuditoriaUtil; +import com.qsoft.erp.dto.AuditoriaDTO; import com.qsoft.wmp.services.util.ServiceUtil; import com.qsoft.wmp.services.xsd.EntradaAccion; import com.qsoft.wmp.services.xsd.SalidaAccion; import java.util.List; import javax.annotation.PostConstruct; import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.Produces; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; +import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; /** @@ -36,9 +40,14 @@ public class AccionResource { @Inject private AccionGenerica accion; + @Inject + private AuditoriaUtil auditoria; + + @Context + private HttpServletRequest request; + @PostConstruct public void postConstructor() { - System.out.println("POST CONTRUCTOR " + accion); } /** @@ -64,10 +73,17 @@ public class AccionResource { @Produces(MediaType.APPLICATION_JSON) public SalidaAccion postJson(EntradaAccion entrada) { SalidaAccion salida = null; + Long time = System.currentTimeMillis(); + EntidadEnum entidad = null; if (entrada == null) { salida = ServiceUtil.crearSalidaAccionError(ErrorTipo.WARNING, CodigoRespuesta.CODIGO_IN_NULO, "La entrada no puede ser nula"); } else { - EntidadEnum entidad = Enum.valueOf(EntidadEnum.class, entrada.getBodyIn().getEntidad()); + AuditoriaDTO dto = ServiceUtil.crearAuditoria(entrada.getHeaderIn(), entrada.getBodyIn().getEntidad(), + super.getClass().getName() + ".posJson", request.getRequestURL().toString(), + AccionGenerica.class.getName() + ".accionGenerica", ServiceUtil.REQUEST, + "" + entrada.getBodyIn().getTipoAccion(), 0, ServiceUtil.getJson(entrada)); + this.auditoria.AddAuditoria(dto); + entidad = Enum.valueOf(EntidadEnum.class, entrada.getBodyIn().getEntidad()); if (entidad == null) { salida = ServiceUtil.crearSalidaAccionError(ErrorTipo.ERROR, CodigoRespuesta.CODIGO_VALOR_NULO, "No se puede identificar la entidad a la cual se desea acceder"); } else { @@ -80,7 +96,7 @@ public class AccionResource { ex.printStackTrace(System.err); String msg = getCauses(ex, new StringBuilder()); if (msg.contains("Duplicate entry")) { - salida = ServiceUtil.crearSalidaAccionError(ErrorTipo.ERROR, CodigoRespuesta.CODIGO_ERROR_GUARDA_BDD, + salida = ServiceUtil.crearSalidaAccionError(ErrorTipo.ERROR, CodigoRespuesta.CODIGO_ERROR_GUARDA_BDD, "Error el registro " + entrada.getBodyIn().getEntidad() + " ya existe en la Base de datos"); } else { salida = ServiceUtil.crearSalidaAccionError(ErrorTipo.ERROR, CodigoRespuesta.CODIGO_ERROR_GENERICO, "ERROR NO CONTROLADO: " + msg); @@ -88,6 +104,12 @@ public class AccionResource { } } } + time = System.currentTimeMillis() - time; + AuditoriaDTO dto = ServiceUtil.crearAuditoria(salida.getHeaderOut(), entidad.name(), + super.getClass().getName() + ".posJson", request.getRequestURL().toString(), + AccionGenerica.class.getName() + ".accionGenerica", ServiceUtil.RESPONSE, + "", time.intValue(), ServiceUtil.getJson(salida.getError())); + this.auditoria.AddAuditoria(dto); return salida; } diff --git a/src/main/java/com/qsoft/wmp/services/rest/ConsultaResource.java b/src/main/java/com/qsoft/wmp/services/rest/ConsultaResource.java index e00b6ee..1687889 100644 --- a/src/main/java/com/qsoft/wmp/services/rest/ConsultaResource.java +++ b/src/main/java/com/qsoft/wmp/services/rest/ConsultaResource.java @@ -11,17 +11,20 @@ import com.qsoft.util.ms.pojo.HeaderMS; import com.qsoft.erp.constantes.DominioConstantes; import com.qsoft.erp.dominio.ConsultaGenerica; import com.qsoft.erp.dominio.exception.DominioExcepcion; +import com.qsoft.erp.dominio.util.AuditoriaUtil; import com.qsoft.wmp.services.util.ServiceUtil; import com.qsoft.wmp.services.xsd.EntradaConsulta; import com.qsoft.wmp.services.xsd.SalidaConsulta; import java.util.List; import javax.annotation.PostConstruct; import javax.inject.Inject; +import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.Produces; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; +import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; /** @@ -35,9 +38,14 @@ public class ConsultaResource { @Inject private ConsultaGenerica consulta; + @Inject + private AuditoriaUtil auditoria; + + @Context + private HttpServletRequest request; + @PostConstruct public void postConstructor() { - System.out.println("======> POST CONTRUCTOR " + consulta); } /** @@ -63,25 +71,37 @@ public class ConsultaResource { @Produces(MediaType.APPLICATION_JSON) public SalidaConsulta postJson(EntradaConsulta entrada) { SalidaConsulta salida = null; +// Long time = System.currentTimeMillis(); if (entrada == null) { salida = ServiceUtil.crearSalidaConsultaError(ErrorTipo.WARNING, CodigoRespuesta.CODIGO_IN_NULO, "La entrada no puede ser nula"); } else { +// AuditoriaDTO dto = ServiceUtil.crearAuditoria(entrada.getHeaderIn(), entrada.getBodyIn().getEntidad(), +// super.getClass().getName() + ".posJson", this.request.getRequestURL().toString(), +// ConsultaGenerica.class.getName() + ".consultaGenerica", ServiceUtil.REQUEST, +// "" + entrada.getBodyIn().getTipoConsulta(), 0, ServiceUtil.getJson(entrada)); +// this.auditoria.AddAuditoria(dto); try { List resultado = null; resultado = consulta.consultaGenerica(entrada.getHeaderIn(), entrada.getBodyIn().getEntidad(), entrada.getBodyIn().getParametros(), entrada.getBodyIn().getMaximoRegistros(), entrada.getBodyIn().getTipoConsulta()); - + HeaderMS header = entrada.getHeaderIn(); header.setFechaHora(DominioConstantes.getDateTime()); salida = ServiceUtil.crearSalidaConsultaOk(header, entrada.getBodyIn().getEntidad(), resultado); } catch (DominioExcepcion ex) { salida = ServiceUtil.crearSalidaConsultaError(ex.getTipo(), ex.getCodigo(), ex.getMensaje()); - }catch (Exception ex) { + } catch (Exception ex) { salida = ServiceUtil.crearSalidaConsultaError(CodigoRespuesta.CODIGO_ERROR_GENERICO, ex.toString()); ex.printStackTrace(); } - } +// time = System.currentTimeMillis() - time; +// AuditoriaDTO dto = ServiceUtil.crearAuditoria(salida.getHeaderOut(), salida.getBodyOut().getEntidad(), +// super.getClass().getName() + ".posJson", this.request.getRequestURL().toString(), +// ConsultaGenerica.class.getName() + ".consultaGenerica", ServiceUtil.RESPONSE, +// "", time.intValue(), ServiceUtil.getJson(salida.getError())); +// System.out.println("=====> TIEMPO " + dto.getAudTiempoEjecucion()); +// this.auditoria.AddAuditoria(dto); return salida; } diff --git a/src/main/java/com/qsoft/wmp/services/rest/MultipartResource.java b/src/main/java/com/qsoft/wmp/services/rest/MultipartResource.java index 16e2d92..b23e0a4 100644 --- a/src/main/java/com/qsoft/wmp/services/rest/MultipartResource.java +++ b/src/main/java/com/qsoft/wmp/services/rest/MultipartResource.java @@ -14,6 +14,8 @@ import com.qsoft.erp.constantes.DominioConstantes; import com.qsoft.erp.constantes.EntidadEnum; import com.qsoft.erp.dominio.MultipartService; import com.qsoft.erp.dominio.exception.DominioExcepcion; +import com.qsoft.erp.dominio.util.AuditoriaUtil; +import com.qsoft.erp.dto.AuditoriaDTO; import com.qsoft.erp.dto.DocumentoDTO; import com.qsoft.erp.dto.LiquidacionDTO; import com.qsoft.wmp.services.util.ServiceUtil; @@ -27,11 +29,14 @@ import java.util.Map; import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.servlet.annotation.MultipartConfig; +import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.Produces; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; +import javax.ws.rs.core.Application; +import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import org.glassfish.jersey.media.multipart.FormDataBodyPart; import org.glassfish.jersey.media.multipart.FormDataMultiPart; @@ -42,7 +47,7 @@ import org.glassfish.jersey.media.multipart.FormDataMultiPart; * @author james */ @Path("multipart") -@MultipartConfig( +@MultipartConfig( maxFileSize = 838860800l, // 100Mb fileSizeThreshold = 52428800, //512 maxRequestSize = 1024000 // 10Kb @@ -52,6 +57,12 @@ public class MultipartResource { @Inject private MultipartService multipart; + @Inject + private AuditoriaUtil auditoria; + + @Context + private HttpServletRequest request; + @PostConstruct public void postConstructor() { @@ -75,6 +86,7 @@ public class MultipartResource { public SalidaConsulta postFile(FormDataMultiPart input) { SalidaConsulta salida = null; EntradaLiquidacion entrada = null; + Long time = System.currentTimeMillis(); boolean estado = false; if (input != null) { @@ -82,23 +94,29 @@ public class MultipartResource { Map> parts = input.getFields(); int i = 0; try { - System.out.println("===========> RECIBE: " + parts); - for (List p : parts.values()) { + for (List p : parts.values()) { FormDataBodyPart bp = p.get(0); if (i == 0) { entrada = getEntrada(bp); - if(entrada != null && entrada.getBodyIn().getParametros() != null && - entrada.getBodyIn().getParametros().get("Liquidacion") != null && - entrada.getBodyIn().getParametros().get("Liquidacion").getPolCodigo() != null && - entrada.getBodyIn().getParametros().get("Liquidacion").getPolCodigo() == -1){ + if (entrada != null && entrada.getBodyIn() != null) { + AuditoriaDTO dto = ServiceUtil.crearAuditoria(entrada.getHeaderIn(), entrada.getBodyIn().getEntidad(), + super.getClass().getName() + ".posFile", request.getRequestURL().toString(), + MultipartService.class.getName() + ".multipartGenerico", ServiceUtil.REQUEST, + "" + entrada.getBodyIn().getTipoConsulta(), 0, ServiceUtil.getJson(entrada)); + this.auditoria.AddAuditoria(dto); + } + if (entrada != null && entrada.getBodyIn().getParametros() != null + && entrada.getBodyIn().getParametros().get("Liquidacion") != null + && entrada.getBodyIn().getParametros().get("Liquidacion").getPolCodigo() != null + && entrada.getBodyIn().getParametros().get("Liquidacion").getPolCodigo() == -1) { throw new DominioExcepcion(ErrorTipo.ERROR, CodigoRespuesta.CODIGO_VALOR_NULO, - "No existe una poliza activa no puede ejecutar este proceso"); + "No existe una poliza activa no puede ejecutar este proceso"); } } else { InputStream in = bp.getValueAs(InputStream.class); try { - if (in != null && entrada != null && entrada.getBodyIn().getParametros() != null && - entrada.getBodyIn().getParametros().get("Liquidacion") != null) { + if (in != null && entrada != null && entrada.getBodyIn().getParametros() != null + && entrada.getBodyIn().getParametros().get("Liquidacion") != null) { DocumentoDTO doc = (DocumentoDTO) entrada.getBodyIn().getParametros().get("Liquidacion").getDocumentos().get(i - 1); doc.setData(in.readAllBytes()); } @@ -129,6 +147,12 @@ public class MultipartResource { } else { ServiceUtil.crearSalidaConsultaError(CodigoRespuesta.CODIGO_VALOR_NULO, "ERROR. La entrada no puede ser nula"); } + time = System.currentTimeMillis() - time; + AuditoriaDTO dto = ServiceUtil.crearAuditoria(salida.getHeaderOut(), salida.getBodyOut().getEntidad(), + super.getClass().getName() + ".posFile", request.getRequestURL().toString(), + MultipartService.class.getName() + ".multipartGenerico", ServiceUtil.RESPONSE, + "", time.intValue(), ServiceUtil.getJson(salida.getError())); + this.auditoria.AddAuditoria(dto); return salida; } diff --git a/src/main/java/com/qsoft/wmp/services/util/ServiceUtil.java b/src/main/java/com/qsoft/wmp/services/util/ServiceUtil.java index 7e7cdc8..9ea92cb 100644 --- a/src/main/java/com/qsoft/wmp/services/util/ServiceUtil.java +++ b/src/main/java/com/qsoft/wmp/services/util/ServiceUtil.java @@ -5,22 +5,28 @@ */ package com.qsoft.wmp.services.util; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.qsoft.erp.constantes.DominioConstantes; +import com.qsoft.erp.dto.AuditoriaDTO; import com.qsoft.util.constantes.CodigoRespuesta; import com.qsoft.util.constantes.ErrorTipo; import com.qsoft.util.ms.pojo.HeaderMS; import com.qsoft.wmp.services.xsd.SalidaAccion; import com.qsoft.wmp.services.xsd.SalidaConsulta; import java.util.List; -import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; /** * * @author james */ public class ServiceUtil { - - + public static final String REQUEST = "Request"; + public static final String RESPONSE = "Response"; + /** * Crear salida * @@ -35,7 +41,7 @@ public class ServiceUtil { salida.getError().setTipo(ErrorTipo.ERROR.name()); return salida; } - + /** * Crear salida * @@ -66,7 +72,7 @@ public class ServiceUtil { salida.getError().setTipo(error.name()); return salida; } - + /** * Crear salida * @@ -82,9 +88,9 @@ public class ServiceUtil { salida.getError().setTipo(error.name()); return salida; } - + /** - * Crear salida ok + * Crear salida ok * * @param header * @param tipoSalida @@ -101,9 +107,9 @@ public class ServiceUtil { salida.getBodyOut().setData(data); return salida; } - + /** - * Crear salida ok + * Crear salida ok * * @param header * @param estado @@ -119,6 +125,61 @@ public class ServiceUtil { salida.getBodyOut().setEstado(estado); salida.getBodyOut().setResultados(data); return salida; - } + } + + /** + * Permite convertiri un objeto determinado en JSON + * @param object + * @return + */ + public static String getJson(Object object) { + ObjectMapper mapper = new ObjectMapper(); + String json = null; + try { + json = mapper.writeValueAsString(object); + } catch (JsonProcessingException ex) { + Logger.getLogger(ServiceUtil.class.getName()).log(Level.SEVERE, null, ex); + } + return json; + } + + /** + * Permite crear el DTO de auditoria + * + * @param header + * @param entidad + * @param metodo + * @param endpoint + * @param backend + * @param servicio + * @param json + * @param tiempo + * @param accion + * @return + */ + public static AuditoriaDTO crearAuditoria(HeaderMS header, String entidad, String metodo, + String endpoint, String backend, String servicio, String accion, Integer tiempo, String json) { + AuditoriaDTO auditoria = new AuditoriaDTO(); + auditoria.setAudAplicacion(header.getAplicacion()); + auditoria.setAudBackend(backend); + auditoria.setAudCanal(header.getCanal()); + auditoria.setAudDinamico(json); + auditoria.setAudDispositivo(header.getDispositivo()); + auditoria.setAudEmpresa(header.getEmpresa()); + auditoria.setAudEndpoint(endpoint); + auditoria.setAudEntidad(entidad); + auditoria.setAudFecha(DominioConstantes.getBddDate()); + auditoria.setAudGeolocalizacion(header.getGeolocalizacion()); + auditoria.setAudIdioma(header.getIdioma()); + auditoria.setAudMedio(header.getMedio()); + auditoria.setAudMetodo(metodo); + auditoria.setAudServicio(servicio); + auditoria.setAudTiempoEjecucion(tiempo); + auditoria.setAudTipoEjecucion(accion); + auditoria.setAudToken(header.getUuid()); + auditoria.setAudTransaccion(header.getTipoTransaccion()); + auditoria.setAudUsuario(header.getUsuario()); + return auditoria; + } }