|
|
|
@ -16,12 +16,11 @@ |
|
|
|
|
|
|
|
|
|
|
|
package org.springframework.security.config.annotation.web; |
|
|
|
package org.springframework.security.config.annotation.web; |
|
|
|
|
|
|
|
|
|
|
|
import java.lang.reflect.Field; |
|
|
|
|
|
|
|
import java.lang.reflect.Modifier; |
|
|
|
|
|
|
|
import java.util.List; |
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
|
|
|
|
import jakarta.servlet.DispatcherType; |
|
|
|
import jakarta.servlet.DispatcherType; |
|
|
|
import org.junit.jupiter.api.BeforeEach; |
|
|
|
import org.junit.jupiter.api.BeforeEach; |
|
|
|
|
|
|
|
import org.junit.jupiter.api.Disabled; |
|
|
|
import org.junit.jupiter.api.Test; |
|
|
|
import org.junit.jupiter.api.Test; |
|
|
|
|
|
|
|
|
|
|
|
import org.springframework.beans.factory.NoSuchBeanDefinitionException; |
|
|
|
import org.springframework.beans.factory.NoSuchBeanDefinitionException; |
|
|
|
@ -113,8 +112,7 @@ public class AbstractRequestMatcherRegistryTests { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void requestMatchersWhenPatternAndMvcPresentThenReturnMvcRequestMatcherType() throws Exception { |
|
|
|
public void requestMatchersWhenPatternAndMvcPresentThenReturnMvcRequestMatcherType() { |
|
|
|
mockMvcPresentClasspath(true); |
|
|
|
|
|
|
|
mockMvcIntrospector(true); |
|
|
|
mockMvcIntrospector(true); |
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers("/path"); |
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers("/path"); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
@ -123,8 +121,7 @@ public class AbstractRequestMatcherRegistryTests { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void requestMatchersWhenHttpMethodAndPatternAndMvcPresentThenReturnMvcRequestMatcherType() throws Exception { |
|
|
|
public void requestMatchersWhenHttpMethodAndPatternAndMvcPresentThenReturnMvcRequestMatcherType() { |
|
|
|
mockMvcPresentClasspath(true); |
|
|
|
|
|
|
|
mockMvcIntrospector(true); |
|
|
|
mockMvcIntrospector(true); |
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers(HttpMethod.GET, "/path"); |
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers(HttpMethod.GET, "/path"); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
@ -133,8 +130,7 @@ public class AbstractRequestMatcherRegistryTests { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void requestMatchersWhenHttpMethodAndMvcPresentThenReturnMvcRequestMatcherType() throws Exception { |
|
|
|
public void requestMatchersWhenHttpMethodAndMvcPresentThenReturnMvcRequestMatcherType() { |
|
|
|
mockMvcPresentClasspath(true); |
|
|
|
|
|
|
|
mockMvcIntrospector(true); |
|
|
|
mockMvcIntrospector(true); |
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers(HttpMethod.GET); |
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers(HttpMethod.GET); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
@ -143,8 +139,8 @@ public class AbstractRequestMatcherRegistryTests { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void requestMatchersWhenPatternAndMvcNotPresentThenReturnAntPathRequestMatcherType() throws Exception { |
|
|
|
@Disabled |
|
|
|
mockMvcPresentClasspath(false); |
|
|
|
public void requestMatchersWhenPatternAndMvcNotPresentThenReturnAntPathRequestMatcherType() { |
|
|
|
mockMvcIntrospector(false); |
|
|
|
mockMvcIntrospector(false); |
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers("/path"); |
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers("/path"); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
@ -153,9 +149,8 @@ public class AbstractRequestMatcherRegistryTests { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void requestMatchersWhenHttpMethodAndPatternAndMvcNotPresentThenReturnAntPathRequestMatcherType() |
|
|
|
@Disabled |
|
|
|
throws Exception { |
|
|
|
public void requestMatchersWhenHttpMethodAndPatternAndMvcNotPresentThenReturnAntPathRequestMatcherType() { |
|
|
|
mockMvcPresentClasspath(false); |
|
|
|
|
|
|
|
mockMvcIntrospector(false); |
|
|
|
mockMvcIntrospector(false); |
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers(HttpMethod.GET, "/path"); |
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers(HttpMethod.GET, "/path"); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
@ -164,8 +159,8 @@ public class AbstractRequestMatcherRegistryTests { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void requestMatchersWhenHttpMethodAndMvcNotPresentThenReturnAntPathMatcherType() throws Exception { |
|
|
|
@Disabled |
|
|
|
mockMvcPresentClasspath(false); |
|
|
|
public void requestMatchersWhenHttpMethodAndMvcNotPresentThenReturnAntPathMatcherType() { |
|
|
|
mockMvcIntrospector(false); |
|
|
|
mockMvcIntrospector(false); |
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers(HttpMethod.GET); |
|
|
|
List<RequestMatcher> requestMatchers = this.matcherRegistry.requestMatchers(HttpMethod.GET); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
assertThat(requestMatchers).isNotEmpty(); |
|
|
|
@ -174,9 +169,7 @@ public class AbstractRequestMatcherRegistryTests { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
@Test |
|
|
|
public void requestMatchersWhenMvcPresentInClassPathAndMvcIntrospectorBeanNotAvailableThenException() |
|
|
|
public void requestMatchersWhenMvcPresentInClassPathAndMvcIntrospectorBeanNotAvailableThenException() { |
|
|
|
throws Exception { |
|
|
|
|
|
|
|
mockMvcPresentClasspath(true); |
|
|
|
|
|
|
|
mockMvcIntrospector(false); |
|
|
|
mockMvcIntrospector(false); |
|
|
|
assertThatExceptionOfType(NoSuchBeanDefinitionException.class) |
|
|
|
assertThatExceptionOfType(NoSuchBeanDefinitionException.class) |
|
|
|
.isThrownBy(() -> this.matcherRegistry.requestMatchers("/path")).withMessageContaining( |
|
|
|
.isThrownBy(() -> this.matcherRegistry.requestMatchers("/path")).withMessageContaining( |
|
|
|
@ -188,15 +181,6 @@ public class AbstractRequestMatcherRegistryTests { |
|
|
|
given(context.containsBean("mvcHandlerMappingIntrospector")).willReturn(isPresent); |
|
|
|
given(context.containsBean("mvcHandlerMappingIntrospector")).willReturn(isPresent); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private void mockMvcPresentClasspath(Object newValue) throws Exception { |
|
|
|
|
|
|
|
Field mvcPresentField = AbstractRequestMatcherRegistry.class.getDeclaredField("mvcPresent"); |
|
|
|
|
|
|
|
mvcPresentField.setAccessible(true); |
|
|
|
|
|
|
|
Field modifiersField = Field.class.getDeclaredField("modifiers"); |
|
|
|
|
|
|
|
modifiersField.setAccessible(true); |
|
|
|
|
|
|
|
modifiersField.setInt(mvcPresentField, mvcPresentField.getModifiers() & ~Modifier.FINAL); |
|
|
|
|
|
|
|
mvcPresentField.set(null, newValue); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static class TestRequestMatcherRegistry extends AbstractRequestMatcherRegistry<List<RequestMatcher>> { |
|
|
|
private static class TestRequestMatcherRegistry extends AbstractRequestMatcherRegistry<List<RequestMatcher>> { |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
|