Fix backwards compatibility in WebContentInterceptor
As of SPR-11792, WebContentGenerator and WebContentInterceptor offer new APIs and new behavior regarding HTTP caching, including the use of a new CacheControl class. Those changes broke part of the behavior in WebContentInterceptor. This class allows to override the global Cache configuration at the Generator level, using specific mappings. Prior to this change, those mappings would not properly apply the HTTP caching configuration when using deprecated configuration settings in WebContentGenerator. This change fixes those backwards compatibility issues for WebContentInterceptor users. Issue: SPR-13207
This commit is contained in:
@@ -16,9 +16,12 @@
|
||||
|
||||
package org.springframework.web.servlet.mvc;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -26,10 +29,9 @@ import org.springframework.mock.web.test.MockHttpServletRequest;
|
||||
import org.springframework.mock.web.test.MockHttpServletResponse;
|
||||
import org.springframework.web.servlet.support.WebContentGenerator;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* @author Rick Evans
|
||||
* @author Brian Clozel
|
||||
*/
|
||||
public class WebContentInterceptorTests {
|
||||
|
||||
@@ -47,19 +49,18 @@ public class WebContentInterceptorTests {
|
||||
|
||||
|
||||
@Test
|
||||
public void preHandleSetsCacheSecondsOnMatchingRequest() throws Exception {
|
||||
public void cacheResourcesConfiguration() throws Exception {
|
||||
WebContentInterceptor interceptor = new WebContentInterceptor();
|
||||
interceptor.setCacheSeconds(10);
|
||||
|
||||
interceptor.preHandle(request, response, null);
|
||||
|
||||
List cacheControlHeaders = response.getHeaders("Cache-Control");
|
||||
assertNotNull("'Cache-Control' header not set (must be) : null", cacheControlHeaders);
|
||||
assertTrue("'Cache-Control' header not set (must be) : empty", cacheControlHeaders.size() > 0);
|
||||
Iterable<String> cacheControlHeaders = response.getHeaders("Cache-Control");
|
||||
assertThat(cacheControlHeaders, Matchers.hasItem("max-age=10"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void preHandleSetsCacheSecondsOnMatchingRequestWithCustomCacheMapping() throws Exception {
|
||||
public void mappedCacheConfigurationOverridesGlobal() throws Exception {
|
||||
Properties mappings = new Properties();
|
||||
mappings.setProperty("**/*handle.vm", "-1");
|
||||
|
||||
@@ -70,46 +71,74 @@ public class WebContentInterceptorTests {
|
||||
request.setRequestURI("http://localhost:7070/example/adminhandle.vm");
|
||||
interceptor.preHandle(request, response, null);
|
||||
|
||||
List cacheControlHeaders = response.getHeaders("Cache-Control");
|
||||
assertSame("'Cache-Control' header set must be empty", 0, cacheControlHeaders.size());
|
||||
Iterable<String> cacheControlHeaders = response.getHeaders("Cache-Control");
|
||||
assertThat(cacheControlHeaders, Matchers.emptyIterable());
|
||||
|
||||
request.setRequestURI("http://localhost:7070/example/bingo.html");
|
||||
interceptor.preHandle(request, response, null);
|
||||
|
||||
cacheControlHeaders = response.getHeaders("Cache-Control");
|
||||
assertNotNull("'Cache-Control' header not set (must be) : null", cacheControlHeaders);
|
||||
assertTrue("'Cache-Control' header not set (must be) : empty", cacheControlHeaders.size() > 0);
|
||||
assertThat(cacheControlHeaders, Matchers.hasItem("max-age=10"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void preHandleSetsCacheSecondsOnMatchingRequestWithNoCaching() throws Exception {
|
||||
public void preventCacheConfiguration() throws Exception {
|
||||
WebContentInterceptor interceptor = new WebContentInterceptor();
|
||||
interceptor.setCacheSeconds(0);
|
||||
|
||||
interceptor.preHandle(request, response, null);
|
||||
|
||||
List cacheControlHeaders = response.getHeaders("Cache-Control");
|
||||
assertNotNull("'Cache-Control' header not set (must be) : null", cacheControlHeaders);
|
||||
assertTrue("'Cache-Control' header not set (must be) : empty", cacheControlHeaders.size() > 0);
|
||||
Iterable<String> cacheControlHeaders = response.getHeaders("Cache-Control");
|
||||
assertThat(cacheControlHeaders, Matchers.contains("no-store"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void preHandleSetsCacheSecondsOnMatchingRequestWithCachingDisabled() throws Exception {
|
||||
public void emptyCacheConfiguration() throws Exception {
|
||||
WebContentInterceptor interceptor = new WebContentInterceptor();
|
||||
interceptor.setCacheSeconds(-1);
|
||||
|
||||
interceptor.preHandle(request, response, null);
|
||||
|
||||
List expiresHeaders = response.getHeaders("Expires");
|
||||
assertSame("'Expires' header set (must not be) : empty", 0, expiresHeaders.size());
|
||||
List cacheControlHeaders = response.getHeaders("Cache-Control");
|
||||
assertSame("'Cache-Control' header set (must not be) : empty", 0, cacheControlHeaders.size());
|
||||
Iterable<String> expiresHeaders = response.getHeaders("Expires");
|
||||
assertThat(expiresHeaders, Matchers.emptyIterable());
|
||||
Iterable<String> cacheControlHeaders = response.getHeaders("Cache-Control");
|
||||
assertThat(cacheControlHeaders, Matchers.emptyIterable());
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Test
|
||||
public void http10CachingConfigAndSpecificMapping() throws Exception {
|
||||
WebContentInterceptor interceptor = new WebContentInterceptor();
|
||||
interceptor.setCacheSeconds(0);
|
||||
interceptor.setAlwaysMustRevalidate(true);
|
||||
Properties mappings = new Properties();
|
||||
mappings.setProperty("**/*.cache.html", "10");
|
||||
interceptor.setCacheMappings(mappings);
|
||||
|
||||
request.setRequestURI("http://example.org/foo/page.html");
|
||||
interceptor.preHandle(request, response, null);
|
||||
|
||||
Iterable<String> expiresHeaders = response.getHeaders("Expires");
|
||||
assertThat(expiresHeaders, Matchers.iterableWithSize(1));
|
||||
Iterable<String> cacheControlHeaders = response.getHeaders("Cache-Control");
|
||||
assertThat(cacheControlHeaders, Matchers.contains("no-cache", "no-store"));
|
||||
Iterable<String> pragmaHeaders = response.getHeaders("Pragma");
|
||||
assertThat(pragmaHeaders, Matchers.contains("no-cache"));
|
||||
|
||||
response = new MockHttpServletResponse();
|
||||
request.setRequestURI("http://example.org/page.cache.html");
|
||||
interceptor.preHandle(request, response, null);
|
||||
|
||||
expiresHeaders = response.getHeaders("Expires");
|
||||
assertThat(expiresHeaders, Matchers.iterableWithSize(1));
|
||||
cacheControlHeaders = response.getHeaders("Cache-Control");
|
||||
assertThat(cacheControlHeaders, Matchers.contains("max-age=10, must-revalidate"));
|
||||
}
|
||||
|
||||
@Test(expected = IllegalArgumentException.class)
|
||||
public void testSetPathMatcherToNull() throws Exception {
|
||||
WebContentInterceptor interceptor = new WebContentInterceptor();
|
||||
interceptor.setPathMatcher(null);
|
||||
public void throwsExceptionWithNullPathMatcher() throws Exception {
|
||||
WebContentInterceptor interceptor = new WebContentInterceptor();
|
||||
interceptor.setPathMatcher(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user