From 62e145e7fd7c5eeaf75294f81aa2064600266a56 Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Tue, 8 Apr 2025 10:45:34 +0200 Subject: [PATCH] Add test for dispatcher types behavior See gh-16500 --- .../ServletContextInitializerBeansTests.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/ServletContextInitializerBeansTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/ServletContextInitializerBeansTests.java index 605ce7f0b8..0d6b2389e6 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/ServletContextInitializerBeansTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/servlet/ServletContextInitializerBeansTests.java @@ -16,6 +16,8 @@ package org.springframework.boot.web.servlet; +import java.util.EnumSet; + import jakarta.servlet.DispatcherType; import jakarta.servlet.Filter; import jakarta.servlet.FilterChain; @@ -24,6 +26,8 @@ import jakarta.servlet.ServletContext; import jakarta.servlet.ServletRequest; import jakarta.servlet.ServletResponse; import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSessionIdListener; import org.assertj.core.api.ThrowingConsumer; import org.junit.jupiter.api.Test; @@ -34,6 +38,7 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; +import org.springframework.web.filter.OncePerRequestFilter; import static org.assertj.core.api.Assertions.assertThat; @@ -139,6 +144,17 @@ class ServletContextInitializerBeansTests { }); } + @Test + @SuppressWarnings("unchecked") + void shouldApplyFilterRegistrationAnnotationWithDefaultDispatcherTypes() { + load(FilterConfigurationWithAnnotationAndDefaultDispatcherTypes.class); + ServletContextInitializerBeans initializerBeans = new ServletContextInitializerBeans( + this.context.getBeanFactory(), TestServletContextInitializer.class); + assertThatSingleRegistration(initializerBeans, FilterRegistrationBean.class, + (filterRegistrationBean) -> assertThat(filterRegistrationBean.determineDispatcherTypes()) + .containsExactlyElementsOf(EnumSet.allOf(DispatcherType.class))); + } + @Test void shouldApplyOrderFromBean() { load(OrderedServletConfiguration.class); @@ -287,6 +303,26 @@ class ServletContextInitializerBeansTests { } + @Configuration(proxyBeanMethods = false) + static class FilterConfigurationWithAnnotationAndDefaultDispatcherTypes { + + @Bean + @FilterRegistration(name = "test") + TestOncePerRequestFilter testFilter() { + return new TestOncePerRequestFilter(); + } + + static class TestOncePerRequestFilter extends OncePerRequestFilter { + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, + FilterChain filterChain) { + } + + } + + } + @Configuration(proxyBeanMethods = false) static class MultipleInterfacesConfiguration {