|
@@ -17,6 +17,7 @@
|
|
|
package org.springframework.security.config.annotation.web.builders;
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
+import javax.servlet.ServletException;
|
|
|
|
|
|
import org.junit.jupiter.api.AfterEach;
|
|
|
import org.junit.jupiter.api.BeforeEach;
|
|
@@ -24,6 +25,7 @@ import org.junit.jupiter.api.Test;
|
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.context.annotation.Configuration;
|
|
|
+import org.springframework.http.HttpStatus;
|
|
|
import org.springframework.mock.web.MockFilterChain;
|
|
|
import org.springframework.mock.web.MockHttpServletRequest;
|
|
|
import org.springframework.mock.web.MockHttpServletResponse;
|
|
@@ -32,6 +34,7 @@ import org.springframework.security.config.annotation.authentication.builders.Au
|
|
|
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
|
|
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
|
|
|
import org.springframework.security.web.FilterChainProxy;
|
|
|
+import org.springframework.security.web.firewall.HttpStatusRequestRejectedHandler;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
import org.springframework.web.bind.annotation.RestController;
|
|
|
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
|
|
@@ -39,6 +42,8 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc;
|
|
|
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
|
|
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
|
|
|
|
|
+import java.io.IOException;
|
|
|
+
|
|
|
import static org.assertj.core.api.Assertions.assertThat;
|
|
|
|
|
|
/**
|
|
@@ -92,6 +97,15 @@ public class WebSecurityTests {
|
|
|
assertThat(this.response.getStatus()).isEqualTo(HttpServletResponse.SC_UNAUTHORIZED);
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ public void requestRejectedHandlerInvoked() throws ServletException, IOException {
|
|
|
+ loadConfig(RequestRejectedHandlerConfig.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);
|
|
@@ -223,4 +237,14 @@ public class WebSecurityTests {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ @EnableWebSecurity
|
|
|
+ static class RequestRejectedHandlerConfig extends WebSecurityConfigurerAdapter {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void configure(WebSecurity web) throws Exception {
|
|
|
+ web.requestRejectedHandler(new HttpStatusRequestRejectedHandler(HttpStatus.BAD_REQUEST.value()));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|