@ -18,6 +18,8 @@ package org.springframework.security.config.annotation.web.builders;
@@ -18,6 +18,8 @@ package org.springframework.security.config.annotation.web.builders;
import java.io.IOException ;
import io.micrometer.observation.ObservationRegistry ;
import io.micrometer.observation.ObservationTextPublisher ;
import jakarta.servlet.ServletException ;
import jakarta.servlet.http.HttpServletResponse ;
import org.junit.jupiter.api.AfterEach ;
@ -104,6 +106,15 @@ public class WebSecurityTests {
@@ -104,6 +106,15 @@ public class WebSecurityTests {
@Test
public void requestRejectedHandlerInvoked ( ) throws ServletException , IOException {
loadConfig ( DefaultConfig . class ) ;
this . request . setServletPath ( "/spring" ) ;
this . request . setRequestURI ( "/spring/\u0019path" ) ;
this . springSecurityFilterChain . doFilter ( this . request , this . response , this . chain ) ;
assertThat ( this . response . getStatus ( ) ) . isEqualTo ( HttpServletResponse . SC_BAD_REQUEST ) ;
}
@Test
public void customRequestRejectedHandlerInvoked ( ) throws ServletException , IOException {
loadConfig ( RequestRejectedHandlerConfig . class ) ;
this . request . setServletPath ( "/spring" ) ;
this . request . setRequestURI ( "/spring/\u0019path" ) ;
@ -111,6 +122,16 @@ public class WebSecurityTests {
@@ -111,6 +122,16 @@ public class WebSecurityTests {
assertThat ( this . response . getStatus ( ) ) . isEqualTo ( HttpServletResponse . SC_BAD_REQUEST ) ;
}
// gh-12548
@Test
public void requestRejectedHandlerInvokedWhenOperationalObservationRegistry ( ) throws ServletException , IOException {
loadConfig ( ObservationRegistryConfig . class ) ;
this . request . setServletPath ( "/spring" ) ;
this . request . setRequestURI ( "/spring/\u0019path" ) ;
this . springSecurityFilterChain . doFilter ( this . request , this . response , this . chain ) ;
assertThat ( this . response . getStatus ( ) ) . isEqualTo ( HttpServletResponse . SC_BAD_REQUEST ) ;
}
@Test
public void ignoringMvcMatcherServletPath ( ) throws Exception {
loadConfig ( MvcMatcherServletPathConfig . class , LegacyMvcMatchingConfig . class ) ;
@ -143,6 +164,11 @@ public class WebSecurityTests {
@@ -143,6 +164,11 @@ public class WebSecurityTests {
this . context . getAutowireCapableBeanFactory ( ) . autowireBean ( this ) ;
}
@EnableWebSecurity
static class DefaultConfig {
}
@EnableWebSecurity
@Configuration
@EnableWebMvc
@ -243,4 +269,17 @@ public class WebSecurityTests {
@@ -243,4 +269,17 @@ public class WebSecurityTests {
}
@Configuration
@EnableWebSecurity
static class ObservationRegistryConfig {
@Bean
ObservationRegistry observationRegistry ( ) {
ObservationRegistry observationRegistry = ObservationRegistry . create ( ) ;
observationRegistry . observationConfig ( ) . observationHandler ( new ObservationTextPublisher ( ) ) ;
return observationRegistry ;
}
}
}