diff --git a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/AppSecDispatcherServletInstrumentation.java b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/AppSecDispatcherServletInstrumentation.java index 2283932dab2..a5bd68f6af1 100644 --- a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/AppSecDispatcherServletInstrumentation.java +++ b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-3.1/src/main/java/datadog/trace/instrumentation/springweb/AppSecDispatcherServletInstrumentation.java @@ -13,6 +13,7 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; import datadog.trace.api.telemetry.EndpointCollector; +import java.util.HashMap; import java.util.Map; import net.bytebuddy.asm.Advice; import net.bytebuddy.matcher.ElementMatcher; @@ -71,13 +72,16 @@ public static class AppSecHandlerMappingAdvice { @Advice.OnMethodExit(suppress = Throwable.class) public static void afterRefresh(@Advice.Argument(0) final ApplicationContext springCtx) { - final RequestMappingHandlerMapping handler = - springCtx.getBean(RequestMappingHandlerMapping.class); - if (handler == null) { + final Map handlers = + springCtx.getBeansOfType(RequestMappingHandlerMapping.class); + if (handlers == null || handlers.isEmpty()) { return; } - final Map mappings = handler.getHandlerMethods(); - if (mappings == null || mappings.isEmpty()) { + final Map mappings = new HashMap<>(); + for (RequestMappingHandlerMapping mapping : handlers.values()) { + mappings.putAll(mapping.getHandlerMethods()); + } + if (mappings.isEmpty()) { return; } EndpointCollector.get().supplier(new RequestMappingInfoIterator(mappings)); diff --git a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/src/main/java/datadog/trace/instrumentation/springweb/AppSecDispatcherServletWithPathPatternsInstrumentation.java b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/src/main/java/datadog/trace/instrumentation/springweb/AppSecDispatcherServletWithPathPatternsInstrumentation.java index 673ba9e8521..f7a6c333d3d 100644 --- a/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/src/main/java/datadog/trace/instrumentation/springweb/AppSecDispatcherServletWithPathPatternsInstrumentation.java +++ b/dd-java-agent/instrumentation/spring/spring-webmvc/spring-webmvc-5.3/src/main/java/datadog/trace/instrumentation/springweb/AppSecDispatcherServletWithPathPatternsInstrumentation.java @@ -12,6 +12,7 @@ import datadog.trace.agent.tooling.InstrumenterModule; import datadog.trace.api.Config; import datadog.trace.api.telemetry.EndpointCollector; +import java.util.HashMap; import java.util.Map; import net.bytebuddy.asm.Advice; import net.bytebuddy.matcher.ElementMatcher; @@ -66,13 +67,16 @@ public static class AppSecHandlerMappingAdvice { @Advice.OnMethodExit(suppress = Throwable.class) public static void afterRefresh(@Advice.Argument(0) final ApplicationContext springCtx) { - final RequestMappingHandlerMapping handler = - springCtx.getBean(RequestMappingHandlerMapping.class); - if (handler == null) { + final Map handlers = + springCtx.getBeansOfType(RequestMappingHandlerMapping.class); + if (handlers == null || handlers.isEmpty()) { return; } - final Map mappings = handler.getHandlerMethods(); - if (mappings == null || mappings.isEmpty()) { + final Map mappings = new HashMap<>(); + for (RequestMappingHandlerMapping mapping : handlers.values()) { + mappings.putAll(mapping.getHandlerMethods()); + } + if (mappings.isEmpty()) { return; } EndpointCollector.get().supplier(new RequestMappingInfoWithPathPatternsIterator(mappings)); diff --git a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java index ad94c6bed52..3d087b98d39 100644 --- a/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java +++ b/dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java @@ -117,8 +117,7 @@ public final class ConfigDefaults { static final int DEFAULT_APPSEC_WAF_TIMEOUT = 100000; // 0.1 s static final boolean DEFAULT_API_SECURITY_ENABLED = true; static final float DEFAULT_API_SECURITY_SAMPLE_DELAY = 30.0f; - // TODO: change to true once the RFC is approved - static final boolean DEFAULT_API_SECURITY_ENDPOINT_COLLECTION_ENABLED = false; + static final boolean DEFAULT_API_SECURITY_ENDPOINT_COLLECTION_ENABLED = true; static final int DEFAULT_API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT = 300; static final boolean DEFAULT_APPSEC_RASP_ENABLED = true; static final boolean DEFAULT_APPSEC_STACK_TRACE_ENABLED = true;