Commit 65bd9dac authored by Dave Syer's avatar Dave Syer

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
parent 2ec953a2
...@@ -241,7 +241,7 @@ public class EmbeddedWebApplicationContext extends GenericWebApplicationContext ...@@ -241,7 +241,7 @@ public class EmbeddedWebApplicationContext extends GenericWebApplicationContext
for (Entry<String, Filter> filterBean : getOrderedBeansOfType(Filter.class)) { for (Entry<String, Filter> filterBean : getOrderedBeansOfType(Filter.class)) {
String name = filterBean.getKey(); String name = filterBean.getKey();
Filter filter = filterBean.getValue(); Filter filter = filterBean.getValue();
if (!servletRegistrations.contains(filter)) { if (!filterRegistrations.contains(filter)) {
FilterRegistrationBean registration = new FilterRegistrationBean(filter); FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.setName(name); registration.setName(name);
initializers.add(registration); initializers.add(registration);
......
...@@ -317,6 +317,20 @@ public class EmbeddedWebApplicationContextTests { ...@@ -317,6 +317,20 @@ public class EmbeddedWebApplicationContextTests {
verify(servletContext, atMost(1)).addFilter(anyString(), (Filter) anyObject()); 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 @Test
public void postProcessEmbeddedServletContainerFactory() throws Exception { public void postProcessEmbeddedServletContainerFactory() throws Exception {
RootBeanDefinition bd = new RootBeanDefinition( RootBeanDefinition bd = new RootBeanDefinition(
......
...@@ -38,6 +38,7 @@ import static org.mockito.Mockito.mock; ...@@ -38,6 +38,7 @@ import static org.mockito.Mockito.mock;
* {@link TomcatEmbeddedServletContainer}. * {@link TomcatEmbeddedServletContainer}.
* *
* @author Phillip Webb * @author Phillip Webb
* @author Dave Syer
*/ */
public class TomcatEmbeddedServletContainerFactoryTests extends public class TomcatEmbeddedServletContainerFactoryTests extends
AbstractEmbeddedServletContainerFactoryTests { AbstractEmbeddedServletContainerFactoryTests {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment