From 53bcf0d16b414d9f0436ac178c211ca6b9520d8e Mon Sep 17 00:00:00 2001 From: Josh Cummings <3627351+jzheaux@users.noreply.github.com> Date: Wed, 15 Apr 2026 17:12:08 -0600 Subject: [PATCH] Fix Servlet Path Application Signed-off-by: Josh Cummings <3627351+jzheaux@users.noreply.github.com> --- .../PathPatternRequestMatcherFactoryBean.java | 2 +- .../config/http/InterceptUrlConfigTests.java | 72 +++++++++++++++++++ ...InterceptUrlConfigTests-CiRegexMatcher.xml | 36 ++++++++++ ...sts-CiRegexMatcherAuthorizationManager.xml | 36 ++++++++++ ...lConfigTests-DefaultMatcherServletPath.xml | 3 + ...MatcherServletPathAuthorizationManager.xml | 3 + .../InterceptUrlConfigTests-RegexMatcher.xml | 36 ++++++++++ ...Tests-RegexMatcherAuthorizationManager.xml | 36 ++++++++++ 8 files changed, 223 insertions(+), 1 deletion(-) create mode 100644 config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-CiRegexMatcher.xml create mode 100644 config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-CiRegexMatcherAuthorizationManager.xml create mode 100644 config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-RegexMatcher.xml create mode 100644 config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-RegexMatcherAuthorizationManager.xml diff --git a/config/src/main/java/org/springframework/security/config/http/PathPatternRequestMatcherFactoryBean.java b/config/src/main/java/org/springframework/security/config/http/PathPatternRequestMatcherFactoryBean.java index 116f2ccd12..39e13a02ac 100644 --- a/config/src/main/java/org/springframework/security/config/http/PathPatternRequestMatcherFactoryBean.java +++ b/config/src/main/java/org/springframework/security/config/http/PathPatternRequestMatcherFactoryBean.java @@ -70,7 +70,7 @@ public final class PathPatternRequestMatcherFactoryBean @Override public void afterPropertiesSet() throws Exception { if (this.basePath != null) { - this.builder.basePath(this.basePath); + this.builder = this.builder.basePath(this.basePath); } } diff --git a/config/src/test/java/org/springframework/security/config/http/InterceptUrlConfigTests.java b/config/src/test/java/org/springframework/security/config/http/InterceptUrlConfigTests.java index fab1e932c0..2038828317 100644 --- a/config/src/test/java/org/springframework/security/config/http/InterceptUrlConfigTests.java +++ b/config/src/test/java/org/springframework/security/config/http/InterceptUrlConfigTests.java @@ -314,6 +314,78 @@ public class InterceptUrlConfigTests { .autowire()); } + @Test + public void requestWhenUsingDefaultMatcherAndServletPathThenAuthorizesRequestsAccordingly() throws Exception { + this.spring.configLocations(this.xml("DefaultMatcherServletPath")).autowire(); + // @formatter:off + this.mvc.perform(get("/spring/path").with(userCredentials())) + .andExpect(status().isForbidden()); + this.mvc.perform(get("/path").with(userCredentials())) + .andExpect(status().isOk()); + // @formatter:on + } + + @Test + public void requestWhenUsingDefaultMatcherAndServletPathAndAuthorizationManagerThenAuthorizesRequestsAccordingly() + throws Exception { + this.spring.configLocations(this.xml("DefaultMatcherServletPathAuthorizationManager")).autowire(); + // @formatter:off + this.mvc.perform(get("/spring/path").with(userCredentials())) + .andExpect(status().isForbidden()); + this.mvc.perform(get("/path").with(userCredentials())) + .andExpect(status().isOk()); + // @formatter:on + assertThat(this.spring.getContext().getBean(AuthorizationManager.class)).isNotNull(); + } + + @Test + public void requestWhenUsingRegexMatcherThenAuthorizesRequestsAccordingly() throws Exception { + this.spring.configLocations(this.xml("RegexMatcher")).autowire(); + // @formatter:off + this.mvc.perform(get("/path").with(userCredentials())) + .andExpect(status().isForbidden()); + this.mvc.perform(get("/other").with(userCredentials())) + .andExpect(status().isNotFound()); + // @formatter:on + } + + @Test + public void requestWhenUsingRegexMatcherAndAuthorizationManagerThenAuthorizesRequestsAccordingly() + throws Exception { + this.spring.configLocations(this.xml("RegexMatcherAuthorizationManager")).autowire(); + // @formatter:off + this.mvc.perform(get("/path").with(userCredentials())) + .andExpect(status().isForbidden()); + this.mvc.perform(get("/other").with(userCredentials())) + .andExpect(status().isNotFound()); + // @formatter:on + assertThat(this.spring.getContext().getBean(AuthorizationManager.class)).isNotNull(); + } + + @Test + public void requestWhenUsingCiRegexMatcherThenAuthorizesRequestsAccordingly() throws Exception { + this.spring.configLocations(this.xml("CiRegexMatcher")).autowire(); + // @formatter:off + this.mvc.perform(get("/path").with(userCredentials())) + .andExpect(status().isForbidden()); + this.mvc.perform(get("/PATH").with(userCredentials())) + .andExpect(status().isForbidden()); + // @formatter:on + } + + @Test + public void requestWhenUsingCiRegexMatcherAndAuthorizationManagerThenAuthorizesRequestsAccordingly() + throws Exception { + this.spring.configLocations(this.xml("CiRegexMatcherAuthorizationManager")).autowire(); + // @formatter:off + this.mvc.perform(get("/path").with(userCredentials())) + .andExpect(status().isForbidden()); + this.mvc.perform(get("/PATH").with(userCredentials())) + .andExpect(status().isForbidden()); + // @formatter:on + assertThat(this.spring.getContext().getBean(AuthorizationManager.class)).isNotNull(); + } + @Test public void requestWhenUsingFilterAllDispatcherTypesAndAuthorizationManagerThenAuthorizesRequestsAccordingly() throws Exception { diff --git a/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-CiRegexMatcher.xml b/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-CiRegexMatcher.xml new file mode 100644 index 0000000000..37780a6735 --- /dev/null +++ b/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-CiRegexMatcher.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + diff --git a/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-CiRegexMatcherAuthorizationManager.xml b/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-CiRegexMatcherAuthorizationManager.xml new file mode 100644 index 0000000000..f0b4bd71d7 --- /dev/null +++ b/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-CiRegexMatcherAuthorizationManager.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + diff --git a/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-DefaultMatcherServletPath.xml b/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-DefaultMatcherServletPath.xml index 28d4a6cb4b..2f6eba90fc 100644 --- a/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-DefaultMatcherServletPath.xml +++ b/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-DefaultMatcherServletPath.xml @@ -26,8 +26,11 @@ + + + diff --git a/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-DefaultMatcherServletPathAuthorizationManager.xml b/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-DefaultMatcherServletPathAuthorizationManager.xml index 557083ccd8..fefc79d0e5 100644 --- a/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-DefaultMatcherServletPathAuthorizationManager.xml +++ b/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-DefaultMatcherServletPathAuthorizationManager.xml @@ -26,8 +26,11 @@ + + + diff --git a/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-RegexMatcher.xml b/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-RegexMatcher.xml new file mode 100644 index 0000000000..d362d91f27 --- /dev/null +++ b/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-RegexMatcher.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + diff --git a/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-RegexMatcherAuthorizationManager.xml b/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-RegexMatcherAuthorizationManager.xml new file mode 100644 index 0000000000..47fd1c675e --- /dev/null +++ b/config/src/test/resources/org/springframework/security/config/http/InterceptUrlConfigTests-RegexMatcherAuthorizationManager.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + +