From 09e3fc40e5c24a9e10e807f892e1158ba16680d1 Mon Sep 17 00:00:00 2001 From: Felix Date: Fri, 17 Jul 2015 14:50:39 +0200 Subject: [PATCH] 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 --- .../servlet/support/WebContentGenerator.java | 6 ++++ .../mvc/WebContentInterceptorTests.java | 28 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java index 1c0a7081763..038accde199 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/WebContentGenerator.java @@ -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 { } response.setHeader(HEADER_CACHE_CONTROL, headerValue); } + if (response.containsHeader(HEADER_PRAGMA)) { + response.setHeader(HEADER_PRAGMA, ""); + } } /** diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/WebContentInterceptorTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/WebContentInterceptorTests.java index 19340357ec1..047167e8c65 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/WebContentInterceptorTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/WebContentInterceptorTests.java @@ -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 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 pragmaHeaders = response.getHeaders("Pragma"); + assertThat(pragmaHeaders, Matchers.contains("")); + } + @SuppressWarnings("deprecation") @Test public void http10CachingConfigAndSpecificMapping() throws Exception {