Browse Source

Reset Pragma header in WebContentGenerator

As filter-based libraries and projects (such as Spring Security) may
use the "Pragma" header in HTTP responses, WebContentGenerator should
make sure that such headers are overwritten to avoid clashes with
the HTTP caching headers set by the HTTP caching configuration.

Issue: SPR-13252
pull/840/merge
Felix 11 years ago committed by Brian Clozel
parent
commit
09e3fc40e5
  1. 6
      spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java
  2. 28
      spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/WebContentInterceptorTests.java

6
spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java

@ -394,6 +394,9 @@ public abstract class WebContentGenerator extends WebApplicationObjectSupport { @@ -394,6 +394,9 @@ public abstract class WebContentGenerator extends WebApplicationObjectSupport {
String ccValue = cacheControl.getHeaderValue();
if (ccValue != null) {
response.setHeader(HEADER_CACHE_CONTROL, ccValue);
if (response.containsHeader(HEADER_PRAGMA)) {
response.setHeader(HEADER_PRAGMA, "");
}
}
}
}
@ -430,6 +433,9 @@ public abstract class WebContentGenerator extends WebApplicationObjectSupport { @@ -430,6 +433,9 @@ public abstract class WebContentGenerator extends WebApplicationObjectSupport {
}
response.setHeader(HEADER_CACHE_CONTROL, headerValue);
}
if (response.containsHeader(HEADER_PRAGMA)) {
response.setHeader(HEADER_PRAGMA, "");
}
}
/**

28
spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/WebContentInterceptorTests.java

@ -105,6 +105,34 @@ public class WebContentInterceptorTests { @@ -105,6 +105,34 @@ public class WebContentInterceptorTests {
assertThat(cacheControlHeaders, Matchers.emptyIterable());
}
// SPR-13252
@Test
public void cachingConfigAndPragmaHeader() throws Exception {
WebContentInterceptor interceptor = new WebContentInterceptor();
interceptor.setCacheSeconds(10);
response.setHeader("Pragma", "no-cache");
interceptor.preHandle(request, response, null);
Iterable<String> pragmaHeaders = response.getHeaders("Pragma");
assertThat(pragmaHeaders, Matchers.contains(""));
}
// SPR-13252
@SuppressWarnings("deprecation")
@Test
public void http10CachingConfigAndPragmaHeader() throws Exception {
WebContentInterceptor interceptor = new WebContentInterceptor();
interceptor.setCacheSeconds(10);
interceptor.setAlwaysMustRevalidate(true);
response.setHeader("Pragma", "no-cache");
interceptor.preHandle(request, response, null);
Iterable<String> pragmaHeaders = response.getHeaders("Pragma");
assertThat(pragmaHeaders, Matchers.contains(""));
}
@SuppressWarnings("deprecation")
@Test
public void http10CachingConfigAndSpecificMapping() throws Exception {

Loading…
Cancel
Save