用途示例

获取requestbody参数

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
91
92
93
package com.xkcoding.log.aop.aspectj;

import java.io.BufferedReader;
import java.io.IOException;
import java.util.Map;
import java.util.Objects;

import javax.servlet.http.HttpServletRequest;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
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 cn.hutool.json.JSONUtil;
import eu.bitwalker.useragentutils.UserAgent;
import lombok.extern.slf4j.Slf4j;

/**
* @author
* @功能描述 aop 中获取requestbody参数
* @date 2018-08-26
*/
@Aspect
@Component
@Slf4j
public class AopLog {
private static final String START_TIME = "request-start";

/**
* 切入点
*/
@Pointcut("execution(public * com.xkcoding.log.aop.controller.*Controller.*(..))")
public void log() {

}

/**
* 前置操作
*
* @param point 切入点
*/
@Before("log()")
public void beforeLog(JoinPoint point) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();
log.info("【请求 URL】:{}", request.getRequestURL());
log.info("【请求 IP】:{}", request.getRemoteAddr());
log.info("【请求类名】:{},【请求方法名】:{}", point.getSignature().getDeclaringTypeName(), point.getSignature().getName());
log.info("【body】:{},", JSONUtil.toJsonStr(point.getArgs()));
Map<String, String[]> parameterMap = request.getParameterMap();
log.info("【请求参数】:{},", JSONUtil.toJsonStr(parameterMap));
Long start = System.currentTimeMillis();
request.setAttribute(START_TIME, start);
}

/**
* 环绕操作
*
* @param point 切入点
* @return 原方法返回值
* @throws Throwable 异常信息
*/
@Around("log()")
public Object aroundLog(ProceedingJoinPoint point) throws Throwable {
Object result = point.proceed();
log.info("【返回值】:{}", JSONUtil.toJsonStr(result));
return result;
}

/**
* 后置操作
*/
@AfterReturning("log()")
public void afterReturning() {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();

Long start = (Long) request.getAttribute(START_TIME);
Long end = System.currentTimeMillis();
log.info("【请求耗时】:{}毫秒", end - start);

String header = request.getHeader("User-Agent");
UserAgent userAgent = UserAgent.parseUserAgentString(header);
log.info("【浏览器类型】:{},【操作系统】:{},【原始User-Agent】:{}", userAgent.getBrowser().toString(), userAgent.getOperatingSystem().toString(), header);
}
}

修改requestbody参数-示例一

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
@Aspect
@Component
public class EventExtActZProcessAspect {
private static final Logger log = LoggerFactory.getLogger(EventExtActZProcessAspect.class);

@Autowired
private IProcessTypeOrgcodeService processTypeOrgcodeService;
@Autowired
private IActZprocessService actZprocessService;
@Autowired
private ISysBaseAPI sysBaseAPI;

public EventExtActZProcessAspect() {
}

@Pointcut("@annotation(org.jeecg.modules.event.annotation.EventExtActZProcess)")
public void excudeService() {
}

/**
* 前置操作
* 执法系统: 根据案发区域+案件类别+一般执法,获取流程,赋值流程信息
* @param point 切入点
*/
@Before("excudeService()")
public void beforeLog(JoinPoint point) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
String appCode = sysBaseAPI.getAppCode(request);
if(!ZFConstants.CONTEXT_PATH.equals(appCode)) {
return;
}

Object[] args = point.getArgs();
if (ArrayUtils.isNotEmpty(args)){
//入参为对象
for (Object arg : args) {
//对象类型的入参直接修改属性即可
if (arg instanceof Event){
System.out.println("arg = " + arg.toString());
Event event = (Event) arg;

ProcessTypeOrgcode processTypeOrgcode = processTypeOrgcodeService.lambdaQuery()
.eq(ProcessTypeOrgcode::getOrgCode, event.getSysOrgCode())
.eq(ProcessTypeOrgcode::getEventType, event.getEventtype())
.eq(ProcessTypeOrgcode::getZfType, ZFConstants.ZFTYPE_1).one();
if(processTypeOrgcode != null) {
ActZprocess actZprocess = actZprocessService.getById(processTypeOrgcode.getProcDefId());
if(actZprocess != null) {
event.setProcDefId(actZprocess.getId());
event.setProcDefKey(actZprocess.getProcessKey());
event.setProcTitle(actZprocess.getName());
event.setRouteName(actZprocess.getRouteName());
}
}
break;
}
}
}
}
}

修改 requestbody 参数内容-示例二

1
2
3
4
5
6
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataReportUser {
String value() default "";
}
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
@Aspect
@Component
public class DataReportAspect {
@Autowired
private ISysUserService sysUserService;
@Autowired
private IWxMiniappUserService wxMiniappUserService;

public DataReportAspect() {
}

@Pointcut("@annotation(org.jeecg.modules.datareport.aspect.annotation.DataReportUser)")
public void excudeService() {
}

/**
* 前置操作
* @param point 切入点
*/
@Before("excudeService()")
public void beforeLog(JoinPoint point) {
Object arg = point.getArgs()[0];
BaseEntity baseEntity = (BaseEntity) arg;

String openid = baseEntity.getOpenid();
if(StrUtil.isNotBlank(openid)) {
WxMiniappUser wxMiniappUser = wxMiniappUserService.getWxUserByopenid(openid);
if(wxMiniappUser != null) {
String username = wxMiniappUser.getUsername();
if(StrUtil.isNotBlank(username)) {
String orgCode = sysUserService.getUserByName(username).getOrgCode();
baseEntity.setCreateBy(username);
baseEntity.setSysOrgCode(orgCode);
}
}

return;
}

String createBy = baseEntity.getCreateBy();
if(StrUtil.isNotBlank(createBy)) {
SysUser user = sysUserService.getUserByName(createBy);
if(user != null) {
String orgCode = user.getOrgCode();
baseEntity.setSysOrgCode(orgCode);
}

return;
}
}
}
1
2
3
4
5
6
7
8
@AutoLog(value = "数据采集任务表-添加")
@ApiOperation(value="数据采集任务表-添加", notes="数据采集任务表-添加")
@PostMapping(value = "/add")
@DataReportUser
public Result<?> add(@RequestBody DatareportSjcjrw datareportSjcjrw) {
datareportSjcjrwService.save(datareportSjcjrw);
return Result.OK("添加成功!");
}