Skip to content

Commit 8c827dc

Browse files
Merge pull request #115 from AikidoSec/AIK-4390
AIK-4390 Fix: Javalin route reporting not respecting status codes
2 parents 769d922 + 2e5890f commit 8c827dc

File tree

2 files changed

+10
-18
lines changed

2 files changed

+10
-18
lines changed

agent/src/main/java/dev/aikido/agent/wrappers/javalin/JavalinContextClearWrapper.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package dev.aikido.agent.wrappers.javalin;
22

33
import dev.aikido.agent.wrappers.Wrapper;
4+
import dev.aikido.agent_api.collectors.WebResponseCollector;
45
import dev.aikido.agent_api.context.Context;
6+
import jakarta.servlet.http.HttpServletResponse;
57
import net.bytebuddy.asm.Advice;
68
import net.bytebuddy.description.method.MethodDescription;
79
import net.bytebuddy.description.type.TypeDescription;
@@ -26,9 +28,13 @@ public ElementMatcher<? super TypeDescription> getTypeMatcher() {
2628
}
2729

2830
public static class JavalinContextClearAdvice {
29-
@Advice.OnMethodEnter
31+
@Advice.OnMethodEnter(suppress = Throwable.class)
3032
public static void before() {
3133
Context.reset();
3234
}
35+
@Advice.OnMethodExit(suppress = Throwable.class)
36+
public static void after(@Advice.Argument(1) HttpServletResponse response) {
37+
WebResponseCollector.report(response.getStatus());
38+
}
3339
}
3440
}

agent/src/main/java/dev/aikido/agent/wrappers/javalin/JavalinWrapper.java

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,15 @@
22

33
import dev.aikido.agent.wrappers.Wrapper;
44
import dev.aikido.agent_api.collectors.WebRequestCollector;
5-
import dev.aikido.agent_api.collectors.WebResponseCollector;
65
import dev.aikido.agent_api.context.Context;
76
import dev.aikido.agent_api.context.ContextObject;
87
import dev.aikido.agent_api.context.JavalinContextObject;
98
import io.javalin.http.servlet.JavalinServletContext;
10-
import jakarta.servlet.http.HttpServletResponse;
119
import net.bytebuddy.asm.Advice;
1210
import net.bytebuddy.description.method.MethodDescription;
1311
import net.bytebuddy.description.type.TypeDescription;
1412
import net.bytebuddy.matcher.*;
1513

16-
import java.lang.reflect.Executable;
17-
1814
import static net.bytebuddy.implementation.bytecode.assign.Assigner.Typing.DYNAMIC;
1915
import static net.bytebuddy.matcher.ElementMatchers.*;
2016

@@ -35,13 +31,11 @@ public ElementMatcher<? super TypeDescription> getTypeMatcher() {
3531
}
3632
public class JavalinAdvice {
3733
@Advice.OnMethodEnter(suppress = Throwable.class)
38-
public static JavalinServletContext before(
39-
@Advice.This(typing = DYNAMIC, optional = true) Object target,
40-
@Advice.Origin Executable method,
34+
public static void before(
4135
@Advice.Argument(value = 0, typing = DYNAMIC, optional = true) JavalinServletContext ctx
42-
) {
36+
) {
4337
if (Context.get() != null) {
44-
return ctx; // Do not extract if context already exists.
38+
return; // Do not extract if context already exists.
4539
}
4640
// Create a context object :
4741
ContextObject context = new JavalinContextObject(
@@ -56,14 +50,6 @@ public static JavalinServletContext before(
5650
ctx.status(response.status());
5751
ctx.skipRemainingHandlers();
5852
}
59-
60-
return ctx;
61-
}
62-
@Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class)
63-
public static void after(
64-
@Advice.Enter(typing = DYNAMIC) JavalinServletContext ctx
65-
) {
66-
WebResponseCollector.report(ctx.statusCode());
6753
}
6854
}
6955

0 commit comments

Comments
 (0)