Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ private void configureScope(

private @NotNull HttpServletRequest resolveHttpServletRequest(
final @NotNull IScopes scopes, final @NotNull HttpServletRequest request) {
if (scopes.getOptions().isSendDefaultPii()
if (scopes.getOptions().getDataCollectionResolver().isIncomingRequestBody()
&& qualifiesForCaching(request, scopes.getOptions().getMaxRequestBodySize())) {
return new ContentCachingRequestWrapper(request, 0);
}
Expand Down Expand Up @@ -155,7 +155,7 @@ public RequestBodyExtractingEventProcessor(
@Override
public @NotNull SentryEvent process(@NotNull SentryEvent event, @NotNull Hint hint) {
if (event.getRequest() != null
&& options.isSendDefaultPii()
&& options.getDataCollectionResolver().isIncomingRequestBody()
&& qualifiesForCaching(request, options.getMaxRequestBodySize())) {
event.getRequest().setData(requestPayloadExtractor.extract(request, options));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.sentry.spring7

import io.sentry.Breadcrumb
import io.sentry.HttpBodyType
import io.sentry.IScope
import io.sentry.IScopes
import io.sentry.ISentryLifecycleToken
Expand Down Expand Up @@ -318,6 +319,52 @@ class SentrySpringFilterTest {
}
}

@Test
fun `data collection can enable request body when sendDefaultPii is false`() {
val options =
SentryOptions().apply {
isSendDefaultPii = false
maxRequestBodySize = SMALL
dataCollection.httpBodies = setOf(HttpBodyType.INCOMING_REQUEST)
}
val listener =
fixture.getSut(
request =
MockMvcRequestBuilders.post(URI.create("http://example.com"))
.content("xxx")
.contentType("application/json")
.buildRequest(MockServletContext()),
options = options,
)

listener.doFilter(fixture.request, fixture.response, fixture.chain)

verify(fixture.chain).doFilter(check { assertTrue(it is ContentCachingRequestWrapper) }, any())
}

@Test
fun `data collection can disable request body when sendDefaultPii is true`() {
val options =
SentryOptions().apply {
isSendDefaultPii = true
maxRequestBodySize = SMALL
dataCollection.httpBodies = emptySet()
}
val listener =
fixture.getSut(
request =
MockMvcRequestBuilders.post(URI.create("http://example.com"))
.content("xxx")
.contentType("application/json")
.buildRequest(MockServletContext()),
options = options,
)

listener.doFilter(fixture.request, fixture.response, fixture.chain)

verify(fixture.chain).doFilter(check { assertFalse(it is ContentCachingRequestWrapper) }, any())
}

private fun servletContextWithCustomCookieName(name: String): ServletContext =
MockServletContext().also { it.sessionCookieConfig.name = name }
}
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ private void configureScope(

private @NotNull HttpServletRequest resolveHttpServletRequest(
final @NotNull IScopes scopes, final @NotNull HttpServletRequest request) {
if (scopes.getOptions().isSendDefaultPii()
if (scopes.getOptions().getDataCollectionResolver().isIncomingRequestBody()
&& qualifiesForCaching(request, scopes.getOptions().getMaxRequestBodySize())) {
return new ContentCachingRequestWrapper(request);
}
Expand Down Expand Up @@ -155,7 +155,7 @@ public RequestBodyExtractingEventProcessor(
@Override
public @NotNull SentryEvent process(@NotNull SentryEvent event, @NotNull Hint hint) {
if (event.getRequest() != null
&& options.isSendDefaultPii()
&& options.getDataCollectionResolver().isIncomingRequestBody()
&& qualifiesForCaching(request, options.getMaxRequestBodySize())) {
event.getRequest().setData(requestPayloadExtractor.extract(request, options));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.sentry.spring.jakarta

import io.sentry.Breadcrumb
import io.sentry.HttpBodyType
import io.sentry.IScope
import io.sentry.IScopes
import io.sentry.ISentryLifecycleToken
Expand Down Expand Up @@ -318,6 +319,52 @@ class SentrySpringFilterTest {
}
}

@Test
fun `data collection can enable request body when sendDefaultPii is false`() {
val options =
SentryOptions().apply {
isSendDefaultPii = false
maxRequestBodySize = SMALL
dataCollection.httpBodies = setOf(HttpBodyType.INCOMING_REQUEST)
}
val listener =
fixture.getSut(
request =
MockMvcRequestBuilders.post(URI.create("http://example.com"))
.content("xxx")
.contentType("application/json")
.buildRequest(MockServletContext()),
options = options,
)

listener.doFilter(fixture.request, fixture.response, fixture.chain)

verify(fixture.chain).doFilter(check { assertTrue(it is ContentCachingRequestWrapper) }, any())
}

@Test
fun `data collection can disable request body when sendDefaultPii is true`() {
val options =
SentryOptions().apply {
isSendDefaultPii = true
maxRequestBodySize = SMALL
dataCollection.httpBodies = emptySet()
}
val listener =
fixture.getSut(
request =
MockMvcRequestBuilders.post(URI.create("http://example.com"))
.content("xxx")
.contentType("application/json")
.buildRequest(MockServletContext()),
options = options,
)

listener.doFilter(fixture.request, fixture.response, fixture.chain)

verify(fixture.chain).doFilter(check { assertFalse(it is ContentCachingRequestWrapper) }, any())
}

private fun servletContextWithCustomCookieName(name: String): ServletContext =
MockServletContext().also { it.sessionCookieConfig.name = name }
}
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ private void configureScope(

private @NotNull HttpServletRequest resolveHttpServletRequest(
final @NotNull IScopes scopes, final @NotNull HttpServletRequest request) {
if (scopes.getOptions().isSendDefaultPii()
if (scopes.getOptions().getDataCollectionResolver().isIncomingRequestBody()
&& qualifiesForCaching(request, scopes.getOptions().getMaxRequestBodySize())) {
return new ContentCachingRequestWrapper(request);
}
Expand Down Expand Up @@ -155,7 +155,7 @@ public RequestBodyExtractingEventProcessor(
@Override
public @NotNull SentryEvent process(@NotNull SentryEvent event, @NotNull Hint hint) {
if (event.getRequest() != null
&& options.isSendDefaultPii()
&& options.getDataCollectionResolver().isIncomingRequestBody()
&& qualifiesForCaching(request, options.getMaxRequestBodySize())) {
event.getRequest().setData(requestPayloadExtractor.extract(request, options));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package io.sentry.spring

import io.sentry.Breadcrumb
import io.sentry.HttpBodyType
import io.sentry.IScope
import io.sentry.IScopes
import io.sentry.ISentryLifecycleToken
Expand Down Expand Up @@ -318,6 +319,52 @@ class SentrySpringFilterTest {
}
}

@Test
fun `data collection can enable request body when sendDefaultPii is false`() {
val options =
SentryOptions().apply {
isSendDefaultPii = false
maxRequestBodySize = SMALL
dataCollection.httpBodies = setOf(HttpBodyType.INCOMING_REQUEST)
}
val listener =
fixture.getSut(
request =
MockMvcRequestBuilders.post(URI.create("http://example.com"))
.content("xxx")
.contentType("application/json")
.buildRequest(MockServletContext()),
options = options,
)

listener.doFilter(fixture.request, fixture.response, fixture.chain)

verify(fixture.chain).doFilter(check { assertTrue(it is ContentCachingRequestWrapper) }, any())
}

@Test
fun `data collection can disable request body when sendDefaultPii is true`() {
val options =
SentryOptions().apply {
isSendDefaultPii = true
maxRequestBodySize = SMALL
dataCollection.httpBodies = emptySet()
}
val listener =
fixture.getSut(
request =
MockMvcRequestBuilders.post(URI.create("http://example.com"))
.content("xxx")
.contentType("application/json")
.buildRequest(MockServletContext()),
options = options,
)

listener.doFilter(fixture.request, fixture.response, fixture.chain)

verify(fixture.chain).doFilter(check { assertFalse(it is ContentCachingRequestWrapper) }, any())
}

private fun servletContextWithCustomCookieName(name: String): ServletContext =
MockServletContext().also { it.sessionCookieConfig.name = name }
}
Loading