import java.lang.reflect.Modifier;import java.util.HashMap;import java.util.Map;import javassist.ClassClassPath;import javassist.ClassPool;import javassist.CtClass;import javassist.CtMethod;import javassist.bytecode.CodeAttribute;import javassist.bytecode.LocalVariableAttribute;import javassist.bytecode.MethodInfo;import javax.servlet.http.HttpServletRequest;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.springframework.stereotype.Component;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import com.glodon.bim5d.controller.BaseController;import com.glodon.bim5d.util.LoggerMsgUtil;@Aspect@Componentpublic class LogAspect {	    @Pointcut("execution(public void xxx.xxx.xxx.controller.QRCodeController.download(..))")      public void pointCut() {      }        @Before("pointCut()")      public void before(JoinPoint joinPoint) throws Exception {            //获得代理类      	BaseController controller = (BaseController)joinPoint.getTarget();    	//获得request    	HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();    	String uri = request.getRequestURI();    	String queryString = request.getQueryString();    	String projectId = getProjectId(joinPoint);		try {			HashMap
 inputParam = new HashMap
(); inputParam.put("uri", uri); inputParam.put("projectId", projectId); inputParam.put("RequestBody", queryString); LoggerMsgUtil.enterMethodInfo(controller.getLogger(), inputParam); } catch (Exception e) { LoggerMsgUtil.Info(controller.getLogger(), "记录入口参数失败:{0}", e.getMessage()); }     }          /**     * 从参数列表中获取projectId     *      */    private String getProjectId(JoinPoint joinPoint){     String projectId = null;     try {            //获取参数名称和值              Map
 nameAndArgs = getFieldsNameValueMap(joinPoint);              projectId = nameAndArgs.get("projectId") == null ? null : String.valueOf(nameAndArgs.get("projectId")); } catch (Exception e) { }        return projectId;    }        private Map
 getFieldsNameValueMap(JoinPoint joinPoint) throws Exception {        Object[] args = joinPoint.getArgs();     String classType = joinPoint.getTarget().getClass().getName();            Class
 clazz = Class.forName(classType);            String clazzName = clazz.getName();            String methodName = joinPoint.getSignature().getName(); //获取方法名称           Map
 map=new HashMap
();          ClassPool pool = ClassPool.getDefault();            ClassClassPath classPath = new ClassClassPath(this.getClass());            pool.insertClassPath(classPath);            CtClass cc = pool.get(clazzName);            CtMethod cm = cc.getDeclaredMethod(methodName);            MethodInfo methodInfo = cm.getMethodInfo();          CodeAttribute codeAttribute = methodInfo.getCodeAttribute();            LocalVariableAttribute attr = (LocalVariableAttribute) codeAttribute.getAttribute(LocalVariableAttribute.tag);            if (attr == null) {                throw new RuntimeException();        }            int pos = Modifier.isStatic(cm.getModifiers()) ? 0 : 1;            for (int i = 0; i < cm.getParameterTypes().length; i++){                map.put( attr.variableName(i + pos),args[i]);//paramNames即参数名            }            return map;        }    }