/*
|
* 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);
|
}
|
|
}
|