EncodeLifeCycle.java
1.74 KB
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
package com.topdraw.dockingapi.config;
import com.alibaba.fastjson.JSON;
import com.dtflys.forest.http.ForestBody;
import com.dtflys.forest.http.ForestRequest;
import com.dtflys.forest.lifecycles.MethodAnnotationLifeCycle;
import com.dtflys.forest.reflection.ForestMethod;
import com.topdraw.dockingapi.entity.EncryptEntity;
import com.topdraw.dockingapi.util.DecryptUtils;
import lombok.SneakyThrows;
import java.lang.reflect.Parameter;
/**
* @author wenxin
* @version 1.0
* @date 2024/5/28 下午2:46
*/
public class EncodeLifeCycle implements MethodAnnotationLifeCycle<Encode, Object> {
/**
* 当方法调用时调用此方法,此时还没有执行请求发送
* 此方法可以获得请求对应的方法调用信息,以及动态传入的方法调用参数列表
*/
@SneakyThrows
@Override
public void onInvokeMethod(ForestRequest request, ForestMethod method, Object[] args) {
String value = (String) getAttribute(request, "value");
Parameter[] parameters = method.getMethod().getParameters();
for (int i = 0; i < parameters.length; i++) {
EncodeBody annotation = parameters[i].getAnnotation(EncodeBody.class);
if (annotation != null) {
Object body = args[i];
String jsonString = JSON.toJSONString(body);
String encode = DecryptUtils.encode(value, jsonString);
EncryptEntity encodeBody = new EncryptEntity(encode);
ForestBody forestBody = request.getBody();
//替换body
forestBody.clear();
request.addBody(encodeBody);
}
}
}
@Override
public void onMethodInitialized(ForestMethod method, Encode annotation) {
}
}