|
|
@@ -0,0 +1,98 @@
|
|
|
+package com.zheng.upms.client.interceptor;
|
|
|
+
|
|
|
+import com.zheng.common.util.RequestUtil;
|
|
|
+import com.zheng.upms.dao.model.UpmsLog;
|
|
|
+import com.zheng.upms.rpc.api.UpmsApiService;
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
+import org.apache.commons.lang.ObjectUtils;
|
|
|
+import org.apache.shiro.authz.annotation.RequiresPermissions;
|
|
|
+import org.aspectj.lang.JoinPoint;
|
|
|
+import org.aspectj.lang.ProceedingJoinPoint;
|
|
|
+import org.aspectj.lang.Signature;
|
|
|
+import org.aspectj.lang.annotation.After;
|
|
|
+import org.aspectj.lang.annotation.Around;
|
|
|
+import org.aspectj.lang.annotation.Aspect;
|
|
|
+import org.aspectj.lang.annotation.Before;
|
|
|
+import org.aspectj.lang.reflect.MethodSignature;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.web.context.request.RequestAttributes;
|
|
|
+import org.springframework.web.context.request.RequestContextHolder;
|
|
|
+import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import java.lang.reflect.Method;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 日志记录AOP实现
|
|
|
+ * Created by ZhangShuzheng on 2017/3/14.
|
|
|
+ */
|
|
|
+@Aspect
|
|
|
+public class LogAspect {
|
|
|
+
|
|
|
+ private static Logger _log = LoggerFactory.getLogger(LogAspect.class);
|
|
|
+
|
|
|
+ // 开始时间
|
|
|
+ private long startTime = 0L;
|
|
|
+ // 结束时间
|
|
|
+ private long endTime = 0L;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ UpmsApiService upmsApiService;
|
|
|
+
|
|
|
+ @Before("execution(* *..controller..*.*(..))")
|
|
|
+ public void doBeforeInServiceLayer(JoinPoint joinPoint) {
|
|
|
+ _log.debug("doBeforeInServiceLayer");
|
|
|
+ startTime = System.currentTimeMillis();
|
|
|
+ }
|
|
|
+
|
|
|
+ @After("execution(* *..controller..*.*(..))")
|
|
|
+ public void doAfterInServiceLayer(JoinPoint joinPoint) {
|
|
|
+ _log.debug("doAfterInServiceLayer");
|
|
|
+ }
|
|
|
+
|
|
|
+ @Around("execution(* *..controller..*.*(..))")
|
|
|
+ public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
|
|
|
+ // 获取request
|
|
|
+ RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
|
|
|
+ ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes;
|
|
|
+ HttpServletRequest request = servletRequestAttributes.getRequest();
|
|
|
+
|
|
|
+ UpmsLog upmsLog = new UpmsLog();
|
|
|
+ // 从注解中获取操作名称、获取响应结果
|
|
|
+ Object result = pjp.proceed();
|
|
|
+ Signature signature = pjp.getSignature();
|
|
|
+ MethodSignature methodSignature = (MethodSignature) signature;
|
|
|
+ Method method = methodSignature.getMethod();
|
|
|
+ if (method.isAnnotationPresent(ApiOperation.class)) {
|
|
|
+ ApiOperation log = method.getAnnotation(ApiOperation.class);
|
|
|
+ upmsLog.setDescription(log.value());
|
|
|
+ }
|
|
|
+ if (method.isAnnotationPresent(RequiresPermissions.class)) {
|
|
|
+ RequiresPermissions permissions = method.getAnnotation(RequiresPermissions.class);
|
|
|
+ upmsLog.setPermissions(ObjectUtils.toString(permissions.value()));
|
|
|
+ }
|
|
|
+ endTime = System.currentTimeMillis();
|
|
|
+ _log.debug("doAround>>>result={},耗时:{}", result, endTime - startTime);
|
|
|
+
|
|
|
+ upmsLog.setBasePath(RequestUtil.getBasePath(request));
|
|
|
+ upmsLog.setIp(RequestUtil.getIpAddr(request));
|
|
|
+ upmsLog.setMethod(request.getMethod());
|
|
|
+ if (request.getMethod().equalsIgnoreCase("GET")) {
|
|
|
+ upmsLog.setParameter(request.getQueryString());
|
|
|
+ } else {
|
|
|
+ upmsLog.setParameter(ObjectUtils.toString(request.getParameterMap()));
|
|
|
+ }
|
|
|
+ upmsLog.setResult(ObjectUtils.toString(result));
|
|
|
+ upmsLog.setSpendTime((int) (endTime - startTime));
|
|
|
+ upmsLog.setStartTime(startTime);
|
|
|
+ upmsLog.setUri(request.getRequestURI());
|
|
|
+ upmsLog.setUrl(ObjectUtils.toString(request.getRequestURL()));
|
|
|
+ upmsLog.setUserAgent(request.getHeader("User-Agent"));
|
|
|
+ upmsLog.setUsername(ObjectUtils.toString(request.getUserPrincipal()));
|
|
|
+ upmsApiService.insertUpmsLogSelective(upmsLog);
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|