Mejoras auditoria y secuencias

This commit is contained in:
james 2020-07-02 11:22:44 -05:00
parent 6f669ebb76
commit 7dd9d28f69
5 changed files with 154 additions and 32 deletions

View File

@ -15,11 +15,6 @@ import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider; import javax.ws.rs.ext.Provider;
/**
* See http://www.w3.org/TR/cors/
*
* @author airhacks.com
*/
@Provider @Provider
@Priority(Priorities.HEADER_DECORATOR) @Priority(Priorities.HEADER_DECORATOR)
public class CorsFilter implements ContainerResponseFilter { public class CorsFilter implements ContainerResponseFilter {

View File

@ -12,17 +12,21 @@ import com.qsoft.erp.constantes.DominioConstantes;
import com.qsoft.erp.constantes.EntidadEnum; import com.qsoft.erp.constantes.EntidadEnum;
import com.qsoft.erp.dominio.AccionGenerica; import com.qsoft.erp.dominio.AccionGenerica;
import com.qsoft.erp.dominio.exception.DominioExcepcion; 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.util.ServiceUtil;
import com.qsoft.wmp.services.xsd.EntradaAccion; import com.qsoft.wmp.services.xsd.EntradaAccion;
import com.qsoft.wmp.services.xsd.SalidaAccion; import com.qsoft.wmp.services.xsd.SalidaAccion;
import java.util.List; import java.util.List;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.inject.Inject; import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.POST; import javax.ws.rs.POST;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
/** /**
@ -36,9 +40,14 @@ public class AccionResource {
@Inject @Inject
private AccionGenerica accion; private AccionGenerica accion;
@Inject
private AuditoriaUtil auditoria;
@Context
private HttpServletRequest request;
@PostConstruct @PostConstruct
public void postConstructor() { public void postConstructor() {
System.out.println("POST CONTRUCTOR " + accion);
} }
/** /**
@ -64,10 +73,17 @@ public class AccionResource {
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
public SalidaAccion postJson(EntradaAccion entrada) { public SalidaAccion postJson(EntradaAccion entrada) {
SalidaAccion salida = null; SalidaAccion salida = null;
Long time = System.currentTimeMillis();
EntidadEnum entidad = null;
if (entrada == null) { if (entrada == null) {
salida = ServiceUtil.crearSalidaAccionError(ErrorTipo.WARNING, CodigoRespuesta.CODIGO_IN_NULO, "La entrada no puede ser nula"); salida = ServiceUtil.crearSalidaAccionError(ErrorTipo.WARNING, CodigoRespuesta.CODIGO_IN_NULO, "La entrada no puede ser nula");
} else { } 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) { if (entidad == null) {
salida = ServiceUtil.crearSalidaAccionError(ErrorTipo.ERROR, CodigoRespuesta.CODIGO_VALOR_NULO, "No se puede identificar la entidad a la cual se desea acceder"); salida = ServiceUtil.crearSalidaAccionError(ErrorTipo.ERROR, CodigoRespuesta.CODIGO_VALOR_NULO, "No se puede identificar la entidad a la cual se desea acceder");
} else { } else {
@ -80,7 +96,7 @@ public class AccionResource {
ex.printStackTrace(System.err); ex.printStackTrace(System.err);
String msg = getCauses(ex, new StringBuilder()); String msg = getCauses(ex, new StringBuilder());
if (msg.contains("Duplicate entry")) { 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"); "Error el registro " + entrada.getBodyIn().getEntidad() + " ya existe en la Base de datos");
} else { } else {
salida = ServiceUtil.crearSalidaAccionError(ErrorTipo.ERROR, CodigoRespuesta.CODIGO_ERROR_GENERICO, "ERROR NO CONTROLADO: " + msg); 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; return salida;
} }

View File

@ -11,17 +11,20 @@ import com.qsoft.util.ms.pojo.HeaderMS;
import com.qsoft.erp.constantes.DominioConstantes; import com.qsoft.erp.constantes.DominioConstantes;
import com.qsoft.erp.dominio.ConsultaGenerica; import com.qsoft.erp.dominio.ConsultaGenerica;
import com.qsoft.erp.dominio.exception.DominioExcepcion; 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.util.ServiceUtil;
import com.qsoft.wmp.services.xsd.EntradaConsulta; import com.qsoft.wmp.services.xsd.EntradaConsulta;
import com.qsoft.wmp.services.xsd.SalidaConsulta; import com.qsoft.wmp.services.xsd.SalidaConsulta;
import java.util.List; import java.util.List;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.inject.Inject; import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.POST; import javax.ws.rs.POST;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
/** /**
@ -35,9 +38,14 @@ public class ConsultaResource {
@Inject @Inject
private ConsultaGenerica consulta; private ConsultaGenerica consulta;
@Inject
private AuditoriaUtil auditoria;
@Context
private HttpServletRequest request;
@PostConstruct @PostConstruct
public void postConstructor() { public void postConstructor() {
System.out.println("======> POST CONTRUCTOR " + consulta);
} }
/** /**
@ -63,25 +71,37 @@ public class ConsultaResource {
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
public SalidaConsulta postJson(EntradaConsulta entrada) { public SalidaConsulta postJson(EntradaConsulta entrada) {
SalidaConsulta salida = null; SalidaConsulta salida = null;
// Long time = System.currentTimeMillis();
if (entrada == null) { if (entrada == null) {
salida = ServiceUtil.crearSalidaConsultaError(ErrorTipo.WARNING, CodigoRespuesta.CODIGO_IN_NULO, "La entrada no puede ser nula"); salida = ServiceUtil.crearSalidaConsultaError(ErrorTipo.WARNING, CodigoRespuesta.CODIGO_IN_NULO, "La entrada no puede ser nula");
} else { } 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 { try {
List resultado = null; List resultado = null;
resultado = consulta.consultaGenerica(entrada.getHeaderIn(), entrada.getBodyIn().getEntidad(), resultado = consulta.consultaGenerica(entrada.getHeaderIn(), entrada.getBodyIn().getEntidad(),
entrada.getBodyIn().getParametros(), entrada.getBodyIn().getMaximoRegistros(), entrada.getBodyIn().getTipoConsulta()); entrada.getBodyIn().getParametros(), entrada.getBodyIn().getMaximoRegistros(), entrada.getBodyIn().getTipoConsulta());
HeaderMS header = entrada.getHeaderIn(); HeaderMS header = entrada.getHeaderIn();
header.setFechaHora(DominioConstantes.getDateTime()); header.setFechaHora(DominioConstantes.getDateTime());
salida = ServiceUtil.crearSalidaConsultaOk(header, entrada.getBodyIn().getEntidad(), resultado); salida = ServiceUtil.crearSalidaConsultaOk(header, entrada.getBodyIn().getEntidad(), resultado);
} catch (DominioExcepcion ex) { } catch (DominioExcepcion ex) {
salida = ServiceUtil.crearSalidaConsultaError(ex.getTipo(), ex.getCodigo(), ex.getMensaje()); salida = ServiceUtil.crearSalidaConsultaError(ex.getTipo(), ex.getCodigo(), ex.getMensaje());
}catch (Exception ex) { } catch (Exception ex) {
salida = ServiceUtil.crearSalidaConsultaError(CodigoRespuesta.CODIGO_ERROR_GENERICO, ex.toString()); salida = ServiceUtil.crearSalidaConsultaError(CodigoRespuesta.CODIGO_ERROR_GENERICO, ex.toString());
ex.printStackTrace(); 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; return salida;
} }

View File

@ -14,6 +14,8 @@ import com.qsoft.erp.constantes.DominioConstantes;
import com.qsoft.erp.constantes.EntidadEnum; import com.qsoft.erp.constantes.EntidadEnum;
import com.qsoft.erp.dominio.MultipartService; import com.qsoft.erp.dominio.MultipartService;
import com.qsoft.erp.dominio.exception.DominioExcepcion; 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.DocumentoDTO;
import com.qsoft.erp.dto.LiquidacionDTO; import com.qsoft.erp.dto.LiquidacionDTO;
import com.qsoft.wmp.services.util.ServiceUtil; import com.qsoft.wmp.services.util.ServiceUtil;
@ -27,11 +29,14 @@ import java.util.Map;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.inject.Inject; import javax.inject.Inject;
import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.Produces; import javax.ws.rs.Produces;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.POST; import javax.ws.rs.POST;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import org.glassfish.jersey.media.multipart.FormDataBodyPart; import org.glassfish.jersey.media.multipart.FormDataBodyPart;
import org.glassfish.jersey.media.multipart.FormDataMultiPart; import org.glassfish.jersey.media.multipart.FormDataMultiPart;
@ -42,7 +47,7 @@ import org.glassfish.jersey.media.multipart.FormDataMultiPart;
* @author james * @author james
*/ */
@Path("multipart") @Path("multipart")
@MultipartConfig( @MultipartConfig(
maxFileSize = 838860800l, // 100Mb maxFileSize = 838860800l, // 100Mb
fileSizeThreshold = 52428800, //512 fileSizeThreshold = 52428800, //512
maxRequestSize = 1024000 // 10Kb maxRequestSize = 1024000 // 10Kb
@ -52,6 +57,12 @@ public class MultipartResource {
@Inject @Inject
private MultipartService multipart; private MultipartService multipart;
@Inject
private AuditoriaUtil auditoria;
@Context
private HttpServletRequest request;
@PostConstruct @PostConstruct
public void postConstructor() { public void postConstructor() {
@ -75,6 +86,7 @@ public class MultipartResource {
public SalidaConsulta postFile(FormDataMultiPart input) { public SalidaConsulta postFile(FormDataMultiPart input) {
SalidaConsulta salida = null; SalidaConsulta salida = null;
EntradaLiquidacion entrada = null; EntradaLiquidacion entrada = null;
Long time = System.currentTimeMillis();
boolean estado = false; boolean estado = false;
if (input != null) { if (input != null) {
@ -82,23 +94,29 @@ public class MultipartResource {
Map<String, List<FormDataBodyPart>> parts = input.getFields(); Map<String, List<FormDataBodyPart>> parts = input.getFields();
int i = 0; int i = 0;
try { try {
System.out.println("===========> RECIBE: " + parts); for (List<FormDataBodyPart> p : parts.values()) {
for (List<FormDataBodyPart> p : parts.values()) {
FormDataBodyPart bp = p.get(0); FormDataBodyPart bp = p.get(0);
if (i == 0) { if (i == 0) {
entrada = getEntrada(bp); entrada = getEntrada(bp);
if(entrada != null && entrada.getBodyIn().getParametros() != null && if (entrada != null && entrada.getBodyIn() != null) {
entrada.getBodyIn().getParametros().get("Liquidacion") != null && AuditoriaDTO dto = ServiceUtil.crearAuditoria(entrada.getHeaderIn(), entrada.getBodyIn().getEntidad(),
entrada.getBodyIn().getParametros().get("Liquidacion").getPolCodigo() != null && super.getClass().getName() + ".posFile", request.getRequestURL().toString(),
entrada.getBodyIn().getParametros().get("Liquidacion").getPolCodigo() == -1){ 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, 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 { } else {
InputStream in = bp.getValueAs(InputStream.class); InputStream in = bp.getValueAs(InputStream.class);
try { try {
if (in != null && entrada != null && entrada.getBodyIn().getParametros() != null && if (in != null && entrada != null && entrada.getBodyIn().getParametros() != null
entrada.getBodyIn().getParametros().get("Liquidacion") != null) { && entrada.getBodyIn().getParametros().get("Liquidacion") != null) {
DocumentoDTO doc = (DocumentoDTO) entrada.getBodyIn().getParametros().get("Liquidacion").getDocumentos().get(i - 1); DocumentoDTO doc = (DocumentoDTO) entrada.getBodyIn().getParametros().get("Liquidacion").getDocumentos().get(i - 1);
doc.setData(in.readAllBytes()); doc.setData(in.readAllBytes());
} }
@ -129,6 +147,12 @@ public class MultipartResource {
} else { } else {
ServiceUtil.crearSalidaConsultaError(CodigoRespuesta.CODIGO_VALOR_NULO, "ERROR. La entrada no puede ser nula"); 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; return salida;
} }

View File

@ -5,22 +5,28 @@
*/ */
package com.qsoft.wmp.services.util; 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.CodigoRespuesta;
import com.qsoft.util.constantes.ErrorTipo; import com.qsoft.util.constantes.ErrorTipo;
import com.qsoft.util.ms.pojo.HeaderMS; import com.qsoft.util.ms.pojo.HeaderMS;
import com.qsoft.wmp.services.xsd.SalidaAccion; import com.qsoft.wmp.services.xsd.SalidaAccion;
import com.qsoft.wmp.services.xsd.SalidaConsulta; import com.qsoft.wmp.services.xsd.SalidaConsulta;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.logging.Level;
import java.util.logging.Logger;
/** /**
* *
* @author james * @author james
*/ */
public class ServiceUtil { public class ServiceUtil {
public static final String REQUEST = "Request";
public static final String RESPONSE = "Response";
/** /**
* Crear salida * Crear salida
* *
@ -35,7 +41,7 @@ public class ServiceUtil {
salida.getError().setTipo(ErrorTipo.ERROR.name()); salida.getError().setTipo(ErrorTipo.ERROR.name());
return salida; return salida;
} }
/** /**
* Crear salida * Crear salida
* *
@ -66,7 +72,7 @@ public class ServiceUtil {
salida.getError().setTipo(error.name()); salida.getError().setTipo(error.name());
return salida; return salida;
} }
/** /**
* Crear salida * Crear salida
* *
@ -82,9 +88,9 @@ public class ServiceUtil {
salida.getError().setTipo(error.name()); salida.getError().setTipo(error.name());
return salida; return salida;
} }
/** /**
* Crear salida ok * Crear salida ok
* *
* @param header * @param header
* @param tipoSalida * @param tipoSalida
@ -101,9 +107,9 @@ public class ServiceUtil {
salida.getBodyOut().setData(data); salida.getBodyOut().setData(data);
return salida; return salida;
} }
/** /**
* Crear salida ok * Crear salida ok
* *
* @param header * @param header
* @param estado * @param estado
@ -119,6 +125,61 @@ public class ServiceUtil {
salida.getBodyOut().setEstado(estado); salida.getBodyOut().setEstado(estado);
salida.getBodyOut().setResultados(data); salida.getBodyOut().setResultados(data);
return salida; 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;
}
} }