Skip to content

Commit 3daeeb8

Browse files
committed
Merge branch '5.8.x' into 6.2.x
Closes gh-15439
2 parents 055090c + dab48d2 commit 3daeeb8

File tree

2 files changed

+17
-10
lines changed

2 files changed

+17
-10
lines changed

config/src/main/java/org/springframework/security/config/annotation/web/AbstractRequestMatcherRegistry.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ private boolean isDispatcherServlet(ServletRegistration registration) {
315315
}
316316
}
317317

318-
private String computeErrorMessage(Collection<? extends ServletRegistration> registrations) {
318+
private static String computeErrorMessage(Collection<? extends ServletRegistration> registrations) {
319319
String template = "This method cannot decide whether these patterns are Spring MVC patterns or not. "
320320
+ "If this endpoint is a Spring MVC endpoint, please use requestMatchers(MvcRequestMatcher); "
321321
+ "otherwise, please use requestMatchers(AntPathRequestMatcher).\n\n"
@@ -509,7 +509,7 @@ static class DispatcherServletRequestMatcher implements RequestMatcher {
509509
public boolean matches(HttpServletRequest request) {
510510
String name = request.getHttpServletMapping().getServletName();
511511
ServletRegistration registration = this.servletContext.getServletRegistration(name);
512-
Assert.notNull(name, "Failed to find servlet [" + name + "] in the servlet context");
512+
Assert.notNull(registration, computeErrorMessage(this.servletContext.getServletRegistrations().values()));
513513
try {
514514
Class<?> clazz = Class.forName(registration.getClassName());
515515
return DispatcherServlet.class.isAssignableFrom(clazz);
@@ -551,18 +551,12 @@ RequestMatcher requestMatcher(HttpServletRequest request) {
551551

552552
@Override
553553
public boolean matches(HttpServletRequest request) {
554-
if (this.dispatcherServlet.matches(request)) {
555-
return this.mvc.matches(request);
556-
}
557-
return this.ant.matches(request);
554+
return requestMatcher(request).matches(request);
558555
}
559556

560557
@Override
561558
public MatchResult matcher(HttpServletRequest request) {
562-
if (this.dispatcherServlet.matches(request)) {
563-
return this.mvc.matcher(request);
564-
}
565-
return this.ant.matcher(request);
559+
return requestMatcher(request).matcher(request);
566560
}
567561

568562
@Override

config/src/test/java/org/springframework/security/config/annotation/web/AbstractRequestMatcherRegistryTests.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,19 @@ public void matchesWhenDispatcherServletThenMvc() {
341341
verifyNoMoreInteractions(mvc);
342342
}
343343

344+
@Test
345+
public void matchesWhenNoMappingThenException() {
346+
MockServletContext servletContext = new MockServletContext();
347+
servletContext.addServlet("default", DispatcherServlet.class).addMapping("/");
348+
servletContext.addServlet("path", Servlet.class).addMapping("/services/*");
349+
MvcRequestMatcher mvc = mock(MvcRequestMatcher.class);
350+
AntPathRequestMatcher ant = mock(AntPathRequestMatcher.class);
351+
DispatcherServletDelegatingRequestMatcher requestMatcher = new DispatcherServletDelegatingRequestMatcher(ant,
352+
mvc, servletContext);
353+
MockHttpServletRequest request = new MockHttpServletRequest("GET", "/services/endpoint");
354+
assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> requestMatcher.matcher(request));
355+
}
356+
344357
private void mockMvcIntrospector(boolean isPresent) {
345358
ApplicationContext context = this.matcherRegistry.getApplicationContext();
346359
given(context.containsBean("mvcHandlerMappingIntrospector")).willReturn(isPresent);

0 commit comments

Comments
 (0)