diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/servlet/SpringBootMockMvcBuilderCustomizer.java b/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/servlet/SpringBootMockMvcBuilderCustomizer.java index 357be7e93bd..fa4c8366fa3 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/servlet/SpringBootMockMvcBuilderCustomizer.java +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/main/java/org/springframework/boot/test/autoconfigure/web/servlet/SpringBootMockMvcBuilderCustomizer.java @@ -116,8 +116,8 @@ public class SpringBootMockMvcBuilderCustomizer implements MockMvcBuilderCustomi private void addFilter(ConfigurableMockMvcBuilder builder, AbstractFilterRegistrationBean registration) { Filter filter = registration.getFilter(); Collection urls = registration.getUrlPatterns(); - builder.addFilter(filter, registration.getInitParameters(), registration.determineDispatcherTypes(), - StringUtils.toStringArray(urls)); + builder.addFilter(filter, registration.getFilterName(), registration.getInitParameters(), + registration.determineDispatcherTypes(), StringUtils.toStringArray(urls)); } public void setAddFilters(boolean addFilters) { diff --git a/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/SpringBootMockMvcBuilderCustomizerTests.java b/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/SpringBootMockMvcBuilderCustomizerTests.java index f3e7ffac61f..207be549873 100644 --- a/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/SpringBootMockMvcBuilderCustomizerTests.java +++ b/spring-boot-project/spring-boot-test-autoconfigure/src/test/java/org/springframework/boot/test/autoconfigure/web/servlet/SpringBootMockMvcBuilderCustomizerTests.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.EnumSet; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.CountDownLatch; @@ -66,15 +67,18 @@ class SpringBootMockMvcBuilderCustomizerTests { DefaultMockMvcBuilder builder = MockMvcBuilders.webAppContextSetup(context); SpringBootMockMvcBuilderCustomizer customizer = new SpringBootMockMvcBuilderCustomizer(context); customizer.customize(builder); - FilterRegistrationBean registrationBean = (FilterRegistrationBean) context - .getBean("filterRegistrationBean"); - Filter testFilter = (Filter) context.getBean("testFilter"); - Filter otherTestFilter = registrationBean.getFilter(); + FilterRegistrationBean registrationBean = (FilterRegistrationBean) context.getBean("otherTestFilter"); + TestFilter testFilter = context.getBean("testFilter", TestFilter.class); + OtherTestFilter otherTestFilter = (OtherTestFilter) registrationBean.getFilter(); assertThat(builder).extracting("filters", as(InstanceOfAssertFactories.LIST)) - .extracting("delegate", "initParams", "dispatcherTypes") - .containsExactlyInAnyOrder(tuple(testFilter, Collections.emptyMap(), EnumSet.of(DispatcherType.REQUEST)), - tuple(otherTestFilter, Map.of("a", "alpha", "b", "bravo"), - EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR))); + .extracting("delegate", "dispatcherTypes") + .containsExactlyInAnyOrder(tuple(testFilter, EnumSet.of(DispatcherType.REQUEST)), + tuple(otherTestFilter, EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR))); + builder.build(); + assertThat(testFilter.filterName).isEqualTo("testFilter"); + assertThat(testFilter.initParams).isEmpty(); + assertThat(otherTestFilter.filterName).isEqualTo("otherTestFilter"); + assertThat(otherTestFilter.initParams).isEqualTo(Map.of("a", "alpha", "b", "bravo")); } @Test @@ -137,7 +141,7 @@ class SpringBootMockMvcBuilderCustomizerTests { static class FilterConfiguration { @Bean - FilterRegistrationBean filterRegistrationBean() { + FilterRegistrationBean otherTestFilter() { FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean<>( new OtherTestFilter()); filterRegistrationBean.setInitParameters(Map.of("a", "alpha", "b", "bravo")); @@ -158,9 +162,15 @@ class SpringBootMockMvcBuilderCustomizerTests { static class TestFilter implements Filter { + private String filterName; + + private Map initParams = new HashMap<>(); + @Override public void init(FilterConfig filterConfig) { - + this.filterName = filterConfig.getFilterName(); + Collections.list(filterConfig.getInitParameterNames()) + .forEach((name) -> this.initParams.put(name, filterConfig.getInitParameter(name))); } @Override @@ -177,9 +187,15 @@ class SpringBootMockMvcBuilderCustomizerTests { static class OtherTestFilter implements Filter { + private String filterName; + + private Map initParams = new HashMap<>(); + @Override public void init(FilterConfig filterConfig) { - + this.filterName = filterConfig.getFilterName(); + Collections.list(filterConfig.getInitParameterNames()) + .forEach((name) -> this.initParams.put(name, filterConfig.getInitParameter(name))); } @Override diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/AbstractFilterRegistrationBean.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/AbstractFilterRegistrationBean.java index d7202385c54..fa64a89724b 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/AbstractFilterRegistrationBean.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/servlet/AbstractFilterRegistrationBean.java @@ -265,6 +265,15 @@ public abstract class AbstractFilterRegistrationBean extends D */ public abstract T getFilter(); + /** + * Returns the filter name that will be registered. + * @return the filter name + * @since 3.2.0 + */ + public String getFilterName() { + return getOrDeduceName(getFilter()); + } + @Override public String toString() { StringBuilder builder = new StringBuilder(getOrDeduceName(this));