/* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ package com.megatim.fdxcommons.core.impl.interceptor; import com.megatim.fdxcommons.core.ifaces.interceptor.AfterUserAction; import com.megatim.fdxcommons.core.ifaces.interceptor.InterceptorHandler; import com.megatim.fdxcommons.core.ifaces.interceptor.LoggingInterceptorBinding; import com.megatim.fdxcommons.model.log.ContainerContextDto; import com.megatim.fdxcommons.model.log.UserActionLog; import com.megatim.fdxcommons.tools.context.AppContext; import java.lang.reflect.Method; import java.time.LocalDateTime; import javax.enterprise.context.Dependent; import javax.inject.Inject; import ua_parser.Client; import ua_parser.Parser; /** * * @author ASUS */ @Dependent public class AfterUserActionImpl implements AfterUserAction { @Inject private InterceptorHandler handler; @Override public UserActionLog filter(ContainerContextDto containerContext) throws Exception { Method method = containerContext.getResourceInfo().getResourceMethod(); if (method != null && method.getAnnotation(LoggingInterceptorBinding.class) != null) { return logMethodInvocation(method, containerContext); } else { return null; } } private UserActionLog logMethodInvocation(Method method, ContainerContextDto containerContext) throws Exception { Object responseEntity = containerContext.getContainerResponseContext().getEntity(); Object requestEntity = containerContext.getContainerRequestContext().getProperty("entity"); final int status = containerContext.getContainerResponseContext().getStatus(); UserActionLog log = new UserActionLog(); log.setDateAction(LocalDateTime.now()); log.setUserName(containerContext.getSecurityContext().getUserPrincipal() != null ? containerContext.getSecurityContext().getUserPrincipal().getName() : null); log.setStatus(status); log.setMotif(log.getStatus() != null ? log.getStatus().toString() + " (" + AppContext.registre_codes_http.get(log.getStatus().toString()) + ")" : null); log.setIpAddress(containerContext.getHttpServletRequest().getRemoteAddr()); log.setHttpMethod(containerContext.getContainerRequestContext().getMethod()); log.setRelativePath(containerContext.getUriInfo().getPath()); Parser uaParser = new Parser(); Client c = uaParser.parse(containerContext.getHttpServletRequest().getHeader("User-Agent")); log.setUserAgent(c.userAgent.family); if (status < 400) { log.setMessage(message(method, requestEntity, responseEntity, containerContext)); } else { log.setMessage("Erreur " + status); } return log; } private String message(Method method, Object requestEntity, Object responseEntity, ContainerContextDto containerContext) throws Exception { LoggingInterceptorBinding ann = method.getAnnotation(LoggingInterceptorBinding.class); return handler.finalMessage(ann, method.getParameters(), containerContext.getContainerRequestContext().getUriInfo().getPathParameters(), requestEntity, responseEntity); } }