import java.lang.annotation.*;
/**
-
@author 七月初七
-
@version 1.0
-
@date 2021/7/19 22:50
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@ApiModel(value = “日志注解”)
public @interface Log {
/**
-
日志描述
-
@return
*/
LogEnum[] type() default {};
}
package com.qycq.server.aspect;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.qycq.server.encapsulation.ResultBean;
import com.qycq.server.enums.LogEnum;
import com.qycq.server.exception.GlobalException;
import com.qycq.server.pojo.Errorlog;
import com.qycq.server.pojo.Log;
import com.qycq.server.service.ErrorlogService;
import com.qycq.server.service.LogService;
import com.qycq.server.utils.HttpServletRequestUtil;
import com.qycq.server.utils.IpUtil;
import com.qycq.server.utils.StringUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import org.springframework.security.authentication.AnonymousAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.text.SimpleDateFormat;
import java.util.*;
/**
-
@author 七月初七
-
@version 1.0
-
@date 2021/7/19 23:17
*/
@ApiModel(value = “日志注解切面类”)
@Slf4j
@Configuration
@Aspect
@Order(1)
public class LogAspectImpl {
private static final Logger LOGGER = LoggerFactory.getLogger(LogAspectImpl.class);
@Autowired
private ObjectMapper objectMapper;
@Autowired
private LogService logService;
@Autowired
private ErrorlogService errorlogService;
private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
/**
- 切点
*/
@Pointcut("@annotation(com.qycq.server.annotations.Log)")
public void pointcut() {
}
/**
-
前置增强
-
@param joinPoint
*/
@Before(“pointcut()”)
public void before(JoinPoint joinPoint) {
LOGGER.info("========= 前置增强 start… =========");
}
/**
-
环绕增强
-
@param proceedingJoinPoint
-
@return
*/
@Around(“pointcut()”)
public Object result(ProceedingJoinPoint proceedingJoinPoint) {
LOGGER.info("========= 环绕增强 start… =========");
//获取开始时间
long startTime = System.currentTimeMillis();
HttpServletRequest httpServletRequest = HttpServletRequestUtil.getHttpServletRequest();
Log log = new Log();
Object proceed = null;
try {
//返回结果
proceed = proceedingJoinPoint.proceed();
Signature signature = proceedingJoinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) sign