package com.megatim.apifdxweb.service.impl.filters;
|
|
import com.megatim.apifdxweb.tools.AppContext;
|
import com.megatim.fdxcommons.core.ifaces.interceptor.AfterUserAction;
|
import com.megatim.fdxcommons.core.ifaces.interceptor.InterceptorHandler;
|
import com.megatim.fdxcommons.model.log.ContainerContextDto;
|
import com.megatim.fdxcommons.model.log.UserActionLog;
|
import java.io.IOException;
|
import java.util.logging.Level;
|
import java.util.logging.Logger;
|
import javax.inject.Inject;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.ws.rs.container.ContainerRequestContext;
|
import javax.ws.rs.container.ContainerResponseContext;
|
import javax.ws.rs.container.ContainerResponseFilter;
|
import javax.ws.rs.container.ResourceInfo;
|
import javax.ws.rs.core.Context;
|
import javax.ws.rs.core.SecurityContext;
|
import javax.ws.rs.core.UriInfo;
|
import javax.ws.rs.ext.Provider;
|
import org.apache.camel.ProducerTemplate;
|
import org.apache.camel.cdi.CdiCamelContext;
|
|
/**
|
*
|
* @author ASUS
|
*/
|
@Provider
|
public class AfterUserActionFilter implements ContainerResponseFilter {
|
|
@Context
|
private ResourceInfo resourceInfo;
|
|
@Inject
|
private InterceptorHandler handler;
|
|
@Inject
|
private CdiCamelContext camelContext;
|
|
@Context
|
private SecurityContext securityContext;
|
|
@Context
|
private UriInfo uriInfo;
|
|
@Context
|
private HttpServletRequest servletRequest;
|
|
@Inject
|
private AfterUserAction afterAction;
|
|
@Override
|
public void filter(ContainerRequestContext crc, ContainerResponseContext crc1) throws IOException {
|
try {
|
|
UserActionLog log = afterAction.filter(getContainerContext(crc, crc1));
|
if (log != null) {
|
ProducerTemplate producerTemplate = camelContext.createProducerTemplate();
|
producerTemplate.asyncSendBody("direct:" + AppContext.API_USER_ACTION_DIRECT, log);
|
}
|
|
} catch (Exception ex) {
|
Logger.getLogger(AfterUserActionFilter.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
|
}
|
|
}
|
|
private ContainerContextDto getContainerContext(ContainerRequestContext containerRequestContext, ContainerResponseContext containerResponseContext) {
|
ContainerContextDto containerContext = new ContainerContextDto();
|
|
containerContext.setContainerRequestContext(containerRequestContext);
|
containerContext.setContainerResponseContext(containerResponseContext);
|
containerContext.setHttpServletRequest(servletRequest);
|
containerContext.setUriInfo(uriInfo);
|
containerContext.setResourceInfo(resourceInfo);
|
containerContext.setSecurityContext(securityContext);
|
|
return containerContext;
|
}
|
}
|