package com.jeesite.modules.aspect;
import javax.servlet.http.HttpServletRequest;
import com.jeesite.modules.wslog.entity.WebServiceLog;
import com.jeesite.modules.wslog.service.WebServiceLogService;
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import java.util.ArrayList;
import java.util.List;
@Aspect
@Component
public class RequestAspect {
@Autowired
private WebServiceLogService webServiceLogService;
private Logger logger=Logger.getLogger(RequestAspect.class);
Long startTime =null;
@Pointcut("execution(public * com.jeesite.modules.xmsq.web.WSController.*(..))")
public void log(){
}
@Before("log()")
public void doBefore(JoinPoint joinPoint){
startTime = System.currentTimeMillis();
}
@After("log()")
public void doAfter(JoinPoint joinPoint){
}
@AfterReturning(returning="result",pointcut="log()")
public void doAfterReturning(JoinPoint joinPoint,Object result){
Long executeTime = (System.currentTimeMillis() - startTime);
ServletRequestAttributes sra=(ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request=sra.getRequest();
String url = request.getRequestURI();
String ip = request.getRemoteHost();
String method = request.getMethod();
String executeMethod = joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName();
Object[] obj = joinPoint.getArgs();
List paramList = new ArrayList();
for(Object e:obj){
Object[] array = null;
if(e.getClass().isArray()){
array = (Object[]) e;
for(Object a:array){
paramList.add(a);
}
}else {
paramList.add(e);
}
}
String param = paramList.toString();
String returnValue = result.toString();
WebServiceLog webServiceLog = new WebServiceLog();
webServiceLog.setExecuteTime(executeTime);
webServiceLog.setUrl(url);
webServiceLog.setIp(ip);
webServiceLog.setMethod(method);
webServiceLog.setExecuteMethod(executeMethod);
webServiceLog.setParam(param);
webServiceLog.setReturnValue(returnValue);
webServiceLogService.save(webServiceLog);
}
}