xiangpei
2025-04-18 ccadf9480d4e6a9dcc227a2a0b1f9ae0612e36fd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
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);
    }
 
}