package com.monkeylessey.framework.aspect;
|
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.monkeylessey.annotation.Log;
|
import com.monkeylessey.sys.domain.entity.SysOpLog;
|
import com.monkeylessey.sys.service.SysOpLogService;
|
import com.monkeylessey.framework.utils.SecurityUtil;
|
import lombok.RequiredArgsConstructor;
|
import lombok.extern.slf4j.Slf4j;
|
import org.aspectj.lang.JoinPoint;
|
import org.aspectj.lang.annotation.AfterReturning;
|
import org.aspectj.lang.annotation.Aspect;
|
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 javax.servlet.http.HttpServletRequest;
|
import java.util.Map;
|
|
/**
|
* @author 29443
|
* @date 2022/4/19
|
*/
|
@Aspect
|
@Component
|
@Slf4j
|
@RequiredArgsConstructor
|
public class LogAspect {
|
|
private final SysOpLogService opLogService;
|
|
@Pointcut(value = "@annotation(com.monkeylessey.annotation.Log)")
|
public void point() {
|
}
|
|
/**
|
* @param joinPoint
|
* @param log
|
* @param result
|
* @throws NoSuchMethodException
|
* @annotation(log),处理作用于方法的注解
|
*/
|
@AfterReturning(pointcut = "@annotation(log)", returning = "result")
|
public void afterReturn(JoinPoint joinPoint, Log log, Object result) throws NoSuchMethodException, JsonProcessingException {
|
handleLog(joinPoint, log, result);
|
}
|
|
/**
|
* @param joinPoint
|
* @param log
|
* @within(log),处理作用于类的注解
|
*/
|
@AfterReturning(pointcut = "@within(log)", returning = "result")
|
public void test(JoinPoint joinPoint, Log log, Object result) throws JsonProcessingException {
|
handleLog(joinPoint, log, result);
|
}
|
|
|
protected void handleLog(JoinPoint joinPoint, Log log, Object result) throws JsonProcessingException {
|
SysOpLog opLog = new SysOpLog();
|
String loginName = SecurityUtil.getCurrentUserName();
|
// 设置请求发起人
|
opLog.setRequestBy(loginName);
|
// 获取操作名
|
opLog.setOpName(log.name());
|
joinPoint.getSignature().getName();
|
opLog.setInvokeMethod(joinPoint.getSignature().toString());
|
// 拿到request
|
ServletRequestAttributes requset = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
|
HttpServletRequest request = requset.getRequest();
|
// 获取请求路径
|
opLog.setRequestUrl(request.getRequestURI());
|
// 获取请求方法
|
opLog.setRequestMethod(request.getMethod());
|
// 获取请求ip
|
String remoteAddr = request.getRemoteAddr();
|
opLog.setRequestIp(remoteAddr);
|
// 获取参数
|
Map<String, String[]> parameterMap = request.getParameterMap();
|
if (!parameterMap.isEmpty()) {
|
opLog.setRequestParam(new ObjectMapper().writeValueAsString(parameterMap));
|
}
|
// 设置请求结果
|
opLog.setRequestResult(new ObjectMapper().writeValueAsString(result));
|
opLogService.save(opLog);
|
}
|
|
}
|