From 65bd9dac858c9aad800fb78a4486251b7056ce8c Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Tue, 6 Aug 2013 11:58:19 +0100 Subject: [PATCH] Fix double registration of Filter A stupid typo lurking in EmbeddedWebApplicationContext meant that a FilterRegistrationBean would register a Filter, and then it would be registered again without the initializer. [Fixes #54676948] Filter registered twice --- .../embedded/EmbeddedWebApplicationContext.java | 2 +- .../EmbeddedWebApplicationContextTests.java | 14 ++++++++++++++ ...TomcatEmbeddedServletContainerFactoryTests.java | 1 + 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedWebApplicationContext.java b/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedWebApplicationContext.java index f4a871f091e..ad20cc577cf 100644 --- a/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedWebApplicationContext.java +++ b/spring-boot/src/main/java/org/springframework/boot/context/embedded/EmbeddedWebApplicationContext.java @@ -241,7 +241,7 @@ public class EmbeddedWebApplicationContext extends GenericWebApplicationContext for (Entry filterBean : getOrderedBeansOfType(Filter.class)) { String name = filterBean.getKey(); Filter filter = filterBean.getValue(); - if (!servletRegistrations.contains(filter)) { + if (!filterRegistrations.contains(filter)) { FilterRegistrationBean registration = new FilterRegistrationBean(filter); registration.setName(name); initializers.add(registration); diff --git a/spring-boot/src/test/java/org/springframework/boot/context/embedded/EmbeddedWebApplicationContextTests.java b/spring-boot/src/test/java/org/springframework/boot/context/embedded/EmbeddedWebApplicationContextTests.java index 853f51ba9c4..d7c61f696b2 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/embedded/EmbeddedWebApplicationContextTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/embedded/EmbeddedWebApplicationContextTests.java @@ -317,6 +317,20 @@ public class EmbeddedWebApplicationContextTests { verify(servletContext, atMost(1)).addFilter(anyString(), (Filter) anyObject()); } + @Test + public void filterReegistrationBeansSkipsRegisteredFilters() throws Exception { + addEmbeddedServletContainerFactoryBean(); + Filter filter = mock(Filter.class); + FilterRegistrationBean initializer = new FilterRegistrationBean(filter); + this.context.registerBeanDefinition("initializerBean", + beanDefinition(initializer)); + this.context.registerBeanDefinition("filterBean", beanDefinition(filter)); + this.context.refresh(); + ServletContext servletContext = getEmbeddedServletContainerFactory() + .getServletContext(); + verify(servletContext, atMost(1)).addFilter(anyString(), (Filter) anyObject()); + } + @Test public void postProcessEmbeddedServletContainerFactory() throws Exception { RootBeanDefinition bd = new RootBeanDefinition( diff --git a/spring-boot/src/test/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java b/spring-boot/src/test/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java index 8efee59b819..2d389e52410 100644 --- a/spring-boot/src/test/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java +++ b/spring-boot/src/test/java/org/springframework/boot/context/embedded/tomcat/TomcatEmbeddedServletContainerFactoryTests.java @@ -38,6 +38,7 @@ import static org.mockito.Mockito.mock; * {@link TomcatEmbeddedServletContainer}. * * @author Phillip Webb + * @author Dave Syer */ public class TomcatEmbeddedServletContainerFactoryTests extends AbstractEmbeddedServletContainerFactoryTests {