Commit 6cc272ec authored by Stephane Nicoll's avatar Stephane Nicoll

Polish "Make sure cache busting works with error pages"

Closes gh-14583
parent 64f04fce
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package org.springframework.boot.autoconfigure.freemarker; package org.springframework.boot.autoconfigure.freemarker;
import javax.servlet.DispatcherType;
import javax.servlet.Servlet; import javax.servlet.Servlet;
import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.AutoConfigureAfter;
...@@ -25,6 +26,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; ...@@ -25,6 +26,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication; import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.boot.autoconfigure.web.ConditionalOnEnabledResourceChain; import org.springframework.boot.autoconfigure.web.ConditionalOnEnabledResourceChain;
import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.resource.ResourceUrlEncodingFilter; import org.springframework.web.servlet.resource.ResourceUrlEncodingFilter;
...@@ -74,8 +76,11 @@ class FreeMarkerServletWebConfiguration extends AbstractFreeMarkerConfiguration ...@@ -74,8 +76,11 @@ class FreeMarkerServletWebConfiguration extends AbstractFreeMarkerConfiguration
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
@ConditionalOnEnabledResourceChain @ConditionalOnEnabledResourceChain
public ResourceUrlEncodingFilter resourceUrlEncodingFilter() { public FilterRegistrationBean<ResourceUrlEncodingFilter> resourceUrlEncodingFilter() {
return new ResourceUrlEncodingFilter(); FilterRegistrationBean<ResourceUrlEncodingFilter> registration = new FilterRegistrationBean<>(
new ResourceUrlEncodingFilter());
registration.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ERROR);
return registration;
} }
} }
...@@ -169,12 +169,11 @@ public class ThymeleafAutoConfiguration { ...@@ -169,12 +169,11 @@ public class ThymeleafAutoConfiguration {
@Bean @Bean
@ConditionalOnMissingBean @ConditionalOnMissingBean
@ConditionalOnEnabledResourceChain @ConditionalOnEnabledResourceChain
public FilterRegistrationBean resourceUrlEncodingFilter() { public FilterRegistrationBean<ResourceUrlEncodingFilter> resourceUrlEncodingFilter() {
FilterRegistrationBean<ResourceUrlEncodingFilter> filterRegistrationBean = new FilterRegistrationBean<>( FilterRegistrationBean<ResourceUrlEncodingFilter> registration = new FilterRegistrationBean<>(
new ResourceUrlEncodingFilter()); new ResourceUrlEncodingFilter());
filterRegistrationBean.setDispatcherTypes(DispatcherType.REQUEST, registration.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.ERROR);
DispatcherType.ERROR); return registration;
return filterRegistrationBean;
} }
@Configuration @Configuration
......
/* /*
* Copyright 2012-2017 the original author or authors. * Copyright 2012-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -17,8 +17,10 @@ ...@@ -17,8 +17,10 @@
package org.springframework.boot.autoconfigure.freemarker; package org.springframework.boot.autoconfigure.freemarker;
import java.io.StringWriter; import java.io.StringWriter;
import java.util.EnumSet;
import java.util.Locale; import java.util.Locale;
import javax.servlet.DispatcherType;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import org.junit.After; import org.junit.After;
...@@ -26,6 +28,7 @@ import org.junit.Before; ...@@ -26,6 +28,7 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.springframework.boot.test.util.TestPropertyValues; import org.springframework.boot.test.util.TestPropertyValues;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockServletContext; import org.springframework.mock.web.MockServletContext;
...@@ -153,14 +156,18 @@ public class FreeMarkerAutoConfigurationServletIntegrationTests { ...@@ -153,14 +156,18 @@ public class FreeMarkerAutoConfigurationServletIntegrationTests {
@Test @Test
public void registerResourceHandlingFilterDisabledByDefault() { public void registerResourceHandlingFilterDisabledByDefault() {
registerAndRefreshContext(); registerAndRefreshContext();
assertThat(this.context.getBeansOfType(ResourceUrlEncodingFilter.class)) assertThat(this.context.getBeansOfType(FilterRegistrationBean.class)).isEmpty();
.isEmpty();
} }
@Test @Test
public void registerResourceHandlingFilterOnlyIfResourceChainIsEnabled() { public void registerResourceHandlingFilterOnlyIfResourceChainIsEnabled() {
registerAndRefreshContext("spring.resources.chain.enabled:true"); registerAndRefreshContext("spring.resources.chain.enabled:true");
assertThat(this.context.getBean(ResourceUrlEncodingFilter.class)).isNotNull(); FilterRegistrationBean<?> registration = this.context
.getBean(FilterRegistrationBean.class);
assertThat(registration.getFilter())
.isInstanceOf(ResourceUrlEncodingFilter.class);
assertThat(registration).hasFieldOrPropertyWithValue("dispatcherTypes",
EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR));
} }
private void registerAndRefreshContext(String... env) { private void registerAndRefreshContext(String... env) {
......
/* /*
* Copyright 2012-2017 the original author or authors. * Copyright 2012-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -51,6 +51,7 @@ import org.springframework.mock.web.MockServletContext; ...@@ -51,6 +51,7 @@ import org.springframework.mock.web.MockServletContext;
import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.util.ReflectionTestUtils;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.resource.ResourceUrlEncodingFilter;
import org.springframework.web.servlet.support.RequestContext; import org.springframework.web.servlet.support.RequestContext;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
...@@ -217,7 +218,8 @@ public class ThymeleafServletAutoConfigurationTests { ...@@ -217,7 +218,8 @@ public class ThymeleafServletAutoConfigurationTests {
load(BaseConfiguration.class, "spring.resources.chain.enabled:true"); load(BaseConfiguration.class, "spring.resources.chain.enabled:true");
FilterRegistrationBean<?> registration = this.context FilterRegistrationBean<?> registration = this.context
.getBean(FilterRegistrationBean.class); .getBean(FilterRegistrationBean.class);
assertThat(registration).isNotNull(); assertThat(registration.getFilter())
.isInstanceOf(ResourceUrlEncodingFilter.class);
assertThat(registration).hasFieldOrPropertyWithValue("dispatcherTypes", assertThat(registration).hasFieldOrPropertyWithValue("dispatcherTypes",
EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR)); EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR));
} }
......
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