|
|
|
@ -30,27 +30,35 @@ import org.junit.jupiter.api.Test; |
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.NoSuchBeanDefinitionException; |
|
|
|
import org.springframework.beans.factory.NoSuchBeanDefinitionException; |
|
|
|
import org.springframework.context.ApplicationContext; |
|
|
|
import org.springframework.context.ApplicationContext; |
|
|
|
|
|
|
|
import org.springframework.context.annotation.Configuration; |
|
|
|
import org.springframework.http.HttpMethod; |
|
|
|
import org.springframework.http.HttpMethod; |
|
|
|
import org.springframework.mock.web.MockHttpServletRequest; |
|
|
|
import org.springframework.mock.web.MockHttpServletRequest; |
|
|
|
import org.springframework.security.config.MockServletContext; |
|
|
|
import org.springframework.security.config.MockServletContext; |
|
|
|
import org.springframework.security.config.TestMockHttpServletMappings; |
|
|
|
import org.springframework.security.config.TestMockHttpServletMappings; |
|
|
|
import org.springframework.security.config.annotation.ObjectPostProcessor; |
|
|
|
import org.springframework.security.config.annotation.ObjectPostProcessor; |
|
|
|
import org.springframework.security.config.annotation.web.AbstractRequestMatcherRegistry.DispatcherServletDelegatingRequestMatcher; |
|
|
|
import org.springframework.security.config.annotation.web.AbstractRequestMatcherRegistry.DispatcherServletDelegatingRequestMatcher; |
|
|
|
|
|
|
|
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; |
|
|
|
|
|
|
|
import org.springframework.security.config.test.SpringTestContext; |
|
|
|
import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher; |
|
|
|
import org.springframework.security.web.servlet.util.matcher.MvcRequestMatcher; |
|
|
|
import org.springframework.security.web.util.matcher.AntPathRequestMatcher; |
|
|
|
import org.springframework.security.web.util.matcher.AntPathRequestMatcher; |
|
|
|
import org.springframework.security.web.util.matcher.DispatcherTypeRequestMatcher; |
|
|
|
import org.springframework.security.web.util.matcher.DispatcherTypeRequestMatcher; |
|
|
|
import org.springframework.security.web.util.matcher.RegexRequestMatcher; |
|
|
|
import org.springframework.security.web.util.matcher.RegexRequestMatcher; |
|
|
|
import org.springframework.security.web.util.matcher.RequestMatcher; |
|
|
|
import org.springframework.security.web.util.matcher.RequestMatcher; |
|
|
|
|
|
|
|
import org.springframework.test.web.servlet.MockMvc; |
|
|
|
|
|
|
|
import org.springframework.test.web.servlet.setup.MockMvcBuilders; |
|
|
|
import org.springframework.web.context.WebApplicationContext; |
|
|
|
import org.springframework.web.context.WebApplicationContext; |
|
|
|
import org.springframework.web.servlet.DispatcherServlet; |
|
|
|
import org.springframework.web.servlet.DispatcherServlet; |
|
|
|
|
|
|
|
import org.springframework.web.servlet.config.annotation.EnableWebMvc; |
|
|
|
|
|
|
|
|
|
|
|
import static org.assertj.core.api.Assertions.assertThat; |
|
|
|
import static org.assertj.core.api.Assertions.assertThat; |
|
|
|
import static org.assertj.core.api.Assertions.assertThatExceptionOfType; |
|
|
|
import static org.assertj.core.api.Assertions.assertThatExceptionOfType; |
|
|
|
|
|
|
|
import static org.assertj.core.api.InstanceOfAssertFactories.type; |
|
|
|
import static org.mockito.BDDMockito.given; |
|
|
|
import static org.mockito.BDDMockito.given; |
|
|
|
import static org.mockito.Mockito.mock; |
|
|
|
import static org.mockito.Mockito.mock; |
|
|
|
import static org.mockito.Mockito.verify; |
|
|
|
import static org.mockito.Mockito.verify; |
|
|
|
import static org.mockito.Mockito.verifyNoInteractions; |
|
|
|
import static org.mockito.Mockito.verifyNoInteractions; |
|
|
|
import static org.mockito.Mockito.verifyNoMoreInteractions; |
|
|
|
import static org.mockito.Mockito.verifyNoMoreInteractions; |
|
|
|
|
|
|
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Tests for {@link AbstractRequestMatcherRegistry}. |
|
|
|
* Tests for {@link AbstractRequestMatcherRegistry}. |
|
|
|
@ -206,18 +214,65 @@ public class AbstractRequestMatcherRegistryTests { |
|
|
|
mockMvcIntrospector(true); |
|
|
|
mockMvcIntrospector(true); |
|
|
|
MockServletContext servletContext = new MockServletContext(); |
|
|
|
MockServletContext servletContext = new MockServletContext(); |
|
|
|
given(this.context.getServletContext()).willReturn(servletContext); |
|
|
|
given(this.context.getServletContext()).willReturn(servletContext); |
|
|
|
|
|
|
|
MockHttpServletRequest request = new MockHttpServletRequest(); |
|
|
|
|
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers("/**"); |
|
|
|
|
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
|
|
|
|
assertThat(requestMatchers).hasSize(1); |
|
|
|
|
|
|
|
assertThat(requestMatchers.get(0)).asInstanceOf(type(DispatcherServletDelegatingRequestMatcher.class)) |
|
|
|
|
|
|
|
.extracting((matcher) -> matcher.requestMatcher(request)) |
|
|
|
|
|
|
|
.isInstanceOf(AntPathRequestMatcher.class); |
|
|
|
servletContext.addServlet("servletOne", Servlet.class).addMapping("/one"); |
|
|
|
servletContext.addServlet("servletOne", Servlet.class).addMapping("/one"); |
|
|
|
servletContext.addServlet("servletTwo", Servlet.class).addMapping("/two"); |
|
|
|
servletContext.addServlet("servletTwo", Servlet.class).addMapping("/two"); |
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers("/**"); |
|
|
|
requestMatchers = this.matcherRegistry.requestMatchers("/**"); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
assertThat(requestMatchers).hasSize(1); |
|
|
|
assertThat(requestMatchers).hasSize(1); |
|
|
|
assertThat(requestMatchers.get(0)).isExactlyInstanceOf(AntPathRequestMatcher.class); |
|
|
|
assertThat(requestMatchers.get(0)).asInstanceOf(type(DispatcherServletDelegatingRequestMatcher.class)) |
|
|
|
|
|
|
|
.extracting((matcher) -> matcher.requestMatcher(request)) |
|
|
|
|
|
|
|
.isInstanceOf(AntPathRequestMatcher.class); |
|
|
|
servletContext.addServlet("servletOne", Servlet.class); |
|
|
|
servletContext.addServlet("servletOne", Servlet.class); |
|
|
|
servletContext.addServlet("servletTwo", Servlet.class); |
|
|
|
servletContext.addServlet("servletTwo", Servlet.class); |
|
|
|
requestMatchers = this.matcherRegistry.requestMatchers("/**"); |
|
|
|
requestMatchers = this.matcherRegistry.requestMatchers("/**"); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
assertThat(requestMatchers).hasSize(1); |
|
|
|
assertThat(requestMatchers).hasSize(1); |
|
|
|
assertThat(requestMatchers.get(0)).isExactlyInstanceOf(AntPathRequestMatcher.class); |
|
|
|
assertThat(requestMatchers.get(0)).asInstanceOf(type(DispatcherServletDelegatingRequestMatcher.class)) |
|
|
|
|
|
|
|
.extracting((matcher) -> matcher.requestMatcher(request)) |
|
|
|
|
|
|
|
.isInstanceOf(AntPathRequestMatcher.class); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// gh-14418
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
|
|
|
public void requestMatchersWhenNoDispatcherServletMockMvcThenMvcRequestMatcherType() throws Exception { |
|
|
|
|
|
|
|
MockServletContext servletContext = new MockServletContext(); |
|
|
|
|
|
|
|
try (SpringTestContext spring = new SpringTestContext(this)) { |
|
|
|
|
|
|
|
spring.register(MockMvcConfiguration.class) |
|
|
|
|
|
|
|
.postProcessor((context) -> context.setServletContext(servletContext)) |
|
|
|
|
|
|
|
.autowire(); |
|
|
|
|
|
|
|
this.matcherRegistry.setApplicationContext(spring.getContext()); |
|
|
|
|
|
|
|
MockMvc mvc = MockMvcBuilders.webAppContextSetup(spring.getContext()).build(); |
|
|
|
|
|
|
|
MockHttpServletRequest request = mvc.perform(get("/")).andReturn().getRequest(); |
|
|
|
|
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers("/**"); |
|
|
|
|
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
|
|
|
|
assertThat(requestMatchers).hasSize(1); |
|
|
|
|
|
|
|
assertThat(requestMatchers.get(0)).asInstanceOf(type(DispatcherServletDelegatingRequestMatcher.class)) |
|
|
|
|
|
|
|
.extracting((matcher) -> matcher.requestMatcher(request)) |
|
|
|
|
|
|
|
.isInstanceOf(MvcRequestMatcher.class); |
|
|
|
|
|
|
|
servletContext.addServlet("servletOne", Servlet.class).addMapping("/one"); |
|
|
|
|
|
|
|
servletContext.addServlet("servletTwo", Servlet.class).addMapping("/two"); |
|
|
|
|
|
|
|
requestMatchers = this.matcherRegistry.requestMatchers("/**"); |
|
|
|
|
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
|
|
|
|
assertThat(requestMatchers).hasSize(1); |
|
|
|
|
|
|
|
assertThat(requestMatchers.get(0)).asInstanceOf(type(DispatcherServletDelegatingRequestMatcher.class)) |
|
|
|
|
|
|
|
.extracting((matcher) -> matcher.requestMatcher(request)) |
|
|
|
|
|
|
|
.isInstanceOf(MvcRequestMatcher.class); |
|
|
|
|
|
|
|
servletContext.addServlet("servletOne", Servlet.class); |
|
|
|
|
|
|
|
servletContext.addServlet("servletTwo", Servlet.class); |
|
|
|
|
|
|
|
requestMatchers = this.matcherRegistry.requestMatchers("/**"); |
|
|
|
|
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
|
|
|
|
assertThat(requestMatchers).hasSize(1); |
|
|
|
|
|
|
|
assertThat(requestMatchers.get(0)).asInstanceOf(type(DispatcherServletDelegatingRequestMatcher.class)) |
|
|
|
|
|
|
|
.extracting((matcher) -> matcher.requestMatcher(request)) |
|
|
|
|
|
|
|
.isInstanceOf(MvcRequestMatcher.class); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
@ -398,4 +453,11 @@ public class AbstractRequestMatcherRegistryTests { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Configuration |
|
|
|
|
|
|
|
@EnableWebSecurity |
|
|
|
|
|
|
|
@EnableWebMvc |
|
|
|
|
|
|
|
static class MockMvcConfiguration { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|