From 5c2001ed490adb0cac8b5ef9956de135ea6e2ab5 Mon Sep 17 00:00:00 2001 From: Vishal Kumar Singh Date: Fri, 8 May 2026 18:45:42 +0530 Subject: [PATCH] Return REQUEST dispatcher type from FilterInvocation dummy request WebInvocationPrivilegeEvaluator synthesizes a DummyRequest when checking URL access. DispatcherTypeRequestMatcher matches on getDispatcherType(), which previously hit the unsupported proxy and failed for security filter chains that use dispatcherTypeMatchers (see gh-19131). Signed-off-by: Vishal Kumar Singh --- .../org/springframework/security/web/FilterInvocation.java | 6 ++++++ .../springframework/security/web/FilterInvocationTests.java | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/web/src/main/java/org/springframework/security/web/FilterInvocation.java b/web/src/main/java/org/springframework/security/web/FilterInvocation.java index 3000d13a716..c26cef13444 100644 --- a/web/src/main/java/org/springframework/security/web/FilterInvocation.java +++ b/web/src/main/java/org/springframework/security/web/FilterInvocation.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.Map; +import jakarta.servlet.DispatcherType; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletContext; import jakarta.servlet.ServletRequest; @@ -188,6 +189,11 @@ public String getCharacterEncoding() { return "UTF-8"; } + @Override + public DispatcherType getDispatcherType() { + return DispatcherType.REQUEST; + } + @Override public @Nullable Object getAttribute(String attributeName) { return null; diff --git a/web/src/test/java/org/springframework/security/web/FilterInvocationTests.java b/web/src/test/java/org/springframework/security/web/FilterInvocationTests.java index 84108b361d1..e5b32440ab7 100644 --- a/web/src/test/java/org/springframework/security/web/FilterInvocationTests.java +++ b/web/src/test/java/org/springframework/security/web/FilterInvocationTests.java @@ -19,6 +19,7 @@ import java.util.Enumeration; import java.util.NoSuchElementException; +import jakarta.servlet.DispatcherType; import jakarta.servlet.FilterChain; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @@ -147,4 +148,9 @@ public void testDummyRequestGetHeadersNull() { assertThatExceptionOfType(NoSuchElementException.class).isThrownBy(headers::nextElement); } + @Test + public void dummyRequestDispatcherTypeIsRequest() { + assertThat(new DummyRequest().getDispatcherType()).isEqualTo(DispatcherType.REQUEST); + } + }