Skip to content

Commit 34c7522

Browse files
authored
Merge pull request #539 from lostsnow/feature/add-parameter-type-to-dubbo-request-uri
add parameter types to dubbo request uri
2 parents d800c43 + b87d2ee commit 34c7522

File tree

6 files changed

+26
-5
lines changed

6 files changed

+26
-5
lines changed

dongtai-core/src/main/java/io/dongtai/iast/core/bytecode/enhance/asm/AsmMethods.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ static Method getAsmMethod(final Class<?> clazz,
167167
Object.class,
168168
String.class,
169169
Object[].class,
170+
Class[].class,
170171
Map.class,
171172
String.class,
172173
String.class,

dongtai-core/src/main/java/io/dongtai/iast/core/bytecode/enhance/plugin/framework/dubbo/DubboProxyHandlerInvokeAdviceAdapter.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
public class DubboProxyHandlerInvokeAdviceAdapter extends AbstractAdviceAdapter {
1010
private static final Method GET_ARGUMENTS_METHOD = Method.getMethod("java.lang.Object[] getArguments()");
1111
private static final Method GET_METHOD_NAME_METHOD = Method.getMethod("java.lang.String getMethodName()");
12+
private static final Method GET_PARAMETER_TYPES_METHOD = Method.getMethod("java.lang.Class[] getParameterTypes()");
1213

1314
private final String packageName;
1415
private final Type invocationType;
@@ -60,6 +61,8 @@ private void collectDubboRequestSource() {
6061
loadArg(0);
6162
invokeInterface(this.invocationType, GET_ARGUMENTS_METHOD);
6263
loadArg(0);
64+
invokeInterface(this.invocationType, GET_PARAMETER_TYPES_METHOD);
65+
loadArg(0);
6366
invokeInterface(this.invocationType, this.getAttachmentsMethod);
6467
push(this.classContext.getClassName());
6568
push(this.name);

dongtai-core/src/main/java/io/dongtai/iast/core/handler/hookpoint/SpyDispatcherImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ public void collectDubboRequest(Object handler, Object channel, Object request,
337337

338338
@Override
339339
public void collectDubboRequestSource(Object handler, Object invocation, String methodName,
340-
Object[] arguments, Map<String, ?> headers,
340+
Object[] arguments, Class<?>[] argumentTypes, Map<String, ?> headers,
341341
String hookClass, String hookMethod, String hookSign) {
342342
try {
343343
ScopeManager.SCOPE_TRACKER.getPolicyScope().enterAgent();
@@ -346,7 +346,7 @@ public void collectDubboRequestSource(Object handler, Object invocation, String
346346
return;
347347
}
348348

349-
DubboImpl.collectDubboRequestSource(handler, invocation, methodName, arguments, headers,
349+
DubboImpl.collectDubboRequestSource(handler, invocation, methodName, arguments, argumentTypes, headers,
350350
hookClass, hookMethod, hookSign, INVOKE_ID_SEQUENCER);
351351
} catch (Throwable e) {
352352
DongTaiLog.warn(ErrorCode.get("SPY_COLLECT_DUBBO_FAILED"), "request source", e);

dongtai-core/src/main/java/io/dongtai/iast/core/handler/hookpoint/controller/impl/DubboImpl.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public static void solveDubboRequest(Object handler, Object channel, Object requ
4444

4545

4646
public static void collectDubboRequestSource(Object handler, Object invocation, String methodName,
47-
Object[] arguments, Map<String, ?> headers,
47+
Object[] arguments, Class<?>[] argumentTypes, Map<String, ?> headers,
4848
String hookClass, String hookMethod, String hookSign,
4949
AtomicInteger invokeIdSequencer) {
5050
if (arguments == null || arguments.length == 0) {
@@ -57,6 +57,23 @@ public static void collectDubboRequestSource(Object handler, Object invocation,
5757

5858
String url = (String) requestMeta.get("requestURL") + "/" + methodName;
5959
String uri = (String) requestMeta.get("requestURI") + "/" + methodName;
60+
61+
StringBuilder argSign = new StringBuilder("(");
62+
if (argumentTypes != null && argumentTypes.length > 0) {
63+
int i = 0;
64+
for (Class<?> argumentType : argumentTypes) {
65+
if (i != 0) {
66+
argSign.append(",");
67+
}
68+
argSign.append(argumentType.getCanonicalName());
69+
i++;
70+
}
71+
}
72+
argSign.append(")");
73+
String argSignStr = argSign.toString();
74+
url += argSignStr;
75+
uri += argSignStr;
76+
6077
requestMeta.put("requestURL", url);
6178
requestMeta.put("requestURI", uri);
6279

dongtai-spy/src/main/java/java/lang/dongtai/NopSpy.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public void collectDubboRequest(Object handler, Object channel, Object request,
9797

9898
@Override
9999
public void collectDubboRequestSource(Object handler, Object invocation, String methodName,
100-
Object[] arguments, Map<String, ?> headers,
100+
Object[] arguments, Class<?>[] argumentTypes, Map<String, ?> headers,
101101
String hookClass, String hookMethod, String hookSign) {
102102
}
103103

dongtai-spy/src/main/java/java/lang/dongtai/SpyDispatcher.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ void collectDubboRequest(Object handler, Object channel, Object request,
6060
boolean isTwoWay, boolean isEvent, boolean isBroken, boolean isHeartbeat);
6161

6262
void collectDubboRequestSource(Object handler, Object invocation, String methodName,
63-
Object[] arguments, Map<String, ?> headers,
63+
Object[] arguments, Class<?>[] argumentTypes, Map<String, ?> headers,
6464
String hookClass, String hookMethod, String hookSign);
6565

6666
void collectDubboResponse(Object result, byte status);

0 commit comments

Comments
 (0)