Skip to content

Commit 09e3fc4

Browse files
felixbarnybclozel
authored andcommitted
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
1 parent d8fb6c5 commit 09e3fc4

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,9 @@ else if (cacheControl != null) {
394394
String ccValue = cacheControl.getHeaderValue();
395395
if (ccValue != null) {
396396
response.setHeader(HEADER_CACHE_CONTROL, ccValue);
397+
if (response.containsHeader(HEADER_PRAGMA)) {
398+
response.setHeader(HEADER_PRAGMA, "");
399+
}
397400
}
398401
}
399402
}
@@ -430,6 +433,9 @@ protected final void cacheForSeconds(HttpServletResponse response, int seconds,
430433
}
431434
response.setHeader(HEADER_CACHE_CONTROL, headerValue);
432435
}
436+
if (response.containsHeader(HEADER_PRAGMA)) {
437+
response.setHeader(HEADER_PRAGMA, "");
438+
}
433439
}
434440

435441
/**

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

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,34 @@ public void emptyCacheConfiguration() throws Exception {
105105
assertThat(cacheControlHeaders, Matchers.emptyIterable());
106106
}
107107

108+
// SPR-13252
109+
@Test
110+
public void cachingConfigAndPragmaHeader() throws Exception {
111+
WebContentInterceptor interceptor = new WebContentInterceptor();
112+
interceptor.setCacheSeconds(10);
113+
response.setHeader("Pragma", "no-cache");
114+
115+
interceptor.preHandle(request, response, null);
116+
117+
Iterable<String> pragmaHeaders = response.getHeaders("Pragma");
118+
assertThat(pragmaHeaders, Matchers.contains(""));
119+
}
120+
121+
// SPR-13252
122+
@SuppressWarnings("deprecation")
123+
@Test
124+
public void http10CachingConfigAndPragmaHeader() throws Exception {
125+
WebContentInterceptor interceptor = new WebContentInterceptor();
126+
interceptor.setCacheSeconds(10);
127+
interceptor.setAlwaysMustRevalidate(true);
128+
response.setHeader("Pragma", "no-cache");
129+
130+
interceptor.preHandle(request, response, null);
131+
132+
Iterable<String> pragmaHeaders = response.getHeaders("Pragma");
133+
assertThat(pragmaHeaders, Matchers.contains(""));
134+
}
135+
108136
@SuppressWarnings("deprecation")
109137
@Test
110138
public void http10CachingConfigAndSpecificMapping() throws Exception {

0 commit comments

Comments
 (0)