Skip to content

Commit a118e22

Browse files
committed
Remove deprecated API in WebContentGenerator
Closes spring-projectsgh-31492
1 parent d6c9ed2 commit a118e22

File tree

2 files changed

+8
-297
lines changed

2 files changed

+8
-297
lines changed

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

Lines changed: 8 additions & 240 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,6 @@
4949
* headers can be controlled via the {@link #setCacheSeconds "cacheSeconds"}
5050
* and {@link #setCacheControl "cacheControl"} properties.
5151
*
52-
* <p><b>NOTE:</b> As of Spring 4.2, this generator's default behavior changed when
53-
* using only {@link #setCacheSeconds}, sending HTTP response headers that are in line
54-
* with current browsers and proxies implementations (i.e. no HTTP 1.0 headers anymore)
55-
* Reverting to the previous behavior can be easily done by using one of the newly
56-
* deprecated methods {@link #setUseExpiresHeader}, {@link #setUseCacheControlHeader},
57-
* {@link #setUseCacheControlNoStore} or {@link #setAlwaysMustRevalidate}.
58-
*
5952
* @author Rod Johnson
6053
* @author Juergen Hoeller
6154
* @author Brian Clozel
@@ -75,10 +68,6 @@ public abstract class WebContentGenerator extends WebApplicationObjectSupport {
7568
/** HTTP method "POST". */
7669
public static final String METHOD_POST = "POST";
7770

78-
private static final String HEADER_PRAGMA = "Pragma";
79-
80-
private static final String HEADER_EXPIRES = "Expires";
81-
8271
protected static final String HEADER_CACHE_CONTROL = "Cache-Control";
8372

8473

@@ -100,20 +89,6 @@ public abstract class WebContentGenerator extends WebApplicationObjectSupport {
10089
private String[] varyByRequestHeaders;
10190

10291

103-
// deprecated fields
104-
105-
/** Use HTTP 1.0 expires header? */
106-
private boolean useExpiresHeader = false;
107-
108-
/** Use HTTP 1.1 cache-control header? */
109-
private boolean useCacheControlHeader = true;
110-
111-
/** Use HTTP 1.1 cache-control header value "no-store"? */
112-
private boolean useCacheControlNoStore = true;
113-
114-
private boolean alwaysMustRevalidate = false;
115-
116-
11792
/**
11893
* Create a new WebContentGenerator which supports
11994
* HTTP methods GET, HEAD and POST by default.
@@ -283,90 +258,6 @@ public final String[] getVaryByRequestHeaders() {
283258
return this.varyByRequestHeaders;
284259
}
285260

286-
/**
287-
* Set whether to use the HTTP 1.0 expires header. Default is "false",
288-
* as of 4.2.
289-
* <p>Note: Cache headers will only get applied if caching is enabled
290-
* (or explicitly prevented) for the current request.
291-
* @deprecated as of 4.2, since going forward, the HTTP 1.1 cache-control
292-
* header will be required, with the HTTP 1.0 headers disappearing
293-
*/
294-
@Deprecated
295-
public final void setUseExpiresHeader(boolean useExpiresHeader) {
296-
this.useExpiresHeader = useExpiresHeader;
297-
}
298-
299-
/**
300-
* Return whether the HTTP 1.0 expires header is used.
301-
* @deprecated as of 4.2, in favor of {@link #getCacheControl()}
302-
*/
303-
@Deprecated
304-
public final boolean isUseExpiresHeader() {
305-
return this.useExpiresHeader;
306-
}
307-
308-
/**
309-
* Set whether to use the HTTP 1.1 cache-control header. Default is "true".
310-
* <p>Note: Cache headers will only get applied if caching is enabled
311-
* (or explicitly prevented) for the current request.
312-
* @deprecated as of 4.2, since going forward, the HTTP 1.1 cache-control
313-
* header will be required, with the HTTP 1.0 headers disappearing
314-
*/
315-
@Deprecated
316-
public final void setUseCacheControlHeader(boolean useCacheControlHeader) {
317-
this.useCacheControlHeader = useCacheControlHeader;
318-
}
319-
320-
/**
321-
* Return whether the HTTP 1.1 cache-control header is used.
322-
* @deprecated as of 4.2, in favor of {@link #getCacheControl()}
323-
*/
324-
@Deprecated
325-
public final boolean isUseCacheControlHeader() {
326-
return this.useCacheControlHeader;
327-
}
328-
329-
/**
330-
* Set whether to use the HTTP 1.1 cache-control header value "no-store"
331-
* when preventing caching. Default is "true".
332-
* @deprecated as of 4.2, in favor of {@link #setCacheControl}
333-
*/
334-
@Deprecated
335-
public final void setUseCacheControlNoStore(boolean useCacheControlNoStore) {
336-
this.useCacheControlNoStore = useCacheControlNoStore;
337-
}
338-
339-
/**
340-
* Return whether the HTTP 1.1 cache-control header value "no-store" is used.
341-
* @deprecated as of 4.2, in favor of {@link #getCacheControl()}
342-
*/
343-
@Deprecated
344-
public final boolean isUseCacheControlNoStore() {
345-
return this.useCacheControlNoStore;
346-
}
347-
348-
/**
349-
* An option to add 'must-revalidate' to every Cache-Control header.
350-
* This may be useful with annotated controller methods, which can
351-
* programmatically do a last-modified calculation as described in
352-
* {@link org.springframework.web.context.request.WebRequest#checkNotModified(long)}.
353-
* <p>Default is "false".
354-
* @deprecated as of 4.2, in favor of {@link #setCacheControl}
355-
*/
356-
@Deprecated
357-
public final void setAlwaysMustRevalidate(boolean mustRevalidate) {
358-
this.alwaysMustRevalidate = mustRevalidate;
359-
}
360-
361-
/**
362-
* Return whether 'must-revalidate' is added to every Cache-Control header.
363-
* @deprecated as of 4.2, in favor of {@link #getCacheControl()}
364-
*/
365-
@Deprecated
366-
public final boolean isAlwaysMustRevalidate() {
367-
return this.alwaysMustRevalidate;
368-
}
369-
370261

371262
/**
372263
* Check the given request for supported methods and a required session, if any.
@@ -424,15 +315,6 @@ protected final void applyCacheControl(HttpServletResponse response, CacheContro
424315
if (ccValue != null) {
425316
// Set computed HTTP 1.1 Cache-Control header
426317
response.setHeader(HEADER_CACHE_CONTROL, ccValue);
427-
428-
if (response.containsHeader(HEADER_PRAGMA)) {
429-
// Reset HTTP 1.0 Pragma header if present
430-
response.setHeader(HEADER_PRAGMA, "");
431-
}
432-
if (response.containsHeader(HEADER_EXPIRES)) {
433-
// Reset HTTP 1.0 Expires header if present
434-
response.setHeader(HEADER_EXPIRES, "");
435-
}
436318
}
437319
}
438320

@@ -445,33 +327,18 @@ protected final void applyCacheControl(HttpServletResponse response, CacheContro
445327
* @param cacheSeconds positive number of seconds into the future that the
446328
* response should be cacheable for, 0 to prevent caching
447329
*/
448-
@SuppressWarnings("deprecation")
449330
protected final void applyCacheSeconds(HttpServletResponse response, int cacheSeconds) {
450-
if (this.useExpiresHeader || !this.useCacheControlHeader) {
451-
// Deprecated HTTP 1.0 cache behavior, as in previous Spring versions
452-
if (cacheSeconds > 0) {
453-
cacheForSeconds(response, cacheSeconds);
454-
}
455-
else if (cacheSeconds == 0) {
456-
preventCaching(response);
457-
}
331+
CacheControl cControl;
332+
if (cacheSeconds > 0) {
333+
cControl = CacheControl.maxAge(cacheSeconds, TimeUnit.SECONDS);
334+
}
335+
else if (cacheSeconds == 0) {
336+
cControl = CacheControl.noStore();
458337
}
459338
else {
460-
CacheControl cControl;
461-
if (cacheSeconds > 0) {
462-
cControl = CacheControl.maxAge(cacheSeconds, TimeUnit.SECONDS);
463-
if (this.alwaysMustRevalidate) {
464-
cControl = cControl.mustRevalidate();
465-
}
466-
}
467-
else if (cacheSeconds == 0) {
468-
cControl = (this.useCacheControlNoStore ? CacheControl.noStore() : CacheControl.noCache());
469-
}
470-
else {
471-
cControl = CacheControl.empty();
472-
}
473-
applyCacheControl(response, cControl);
339+
cControl = CacheControl.empty();
474340
}
341+
applyCacheControl(response, cControl);
475342
}
476343

477344

@@ -492,105 +359,6 @@ protected final void checkAndPrepare(
492359
applyCacheSeconds(response, cacheSeconds);
493360
}
494361

495-
/**
496-
* Apply the given cache seconds and generate respective HTTP headers.
497-
* <p>That is, allow caching for the given number of seconds in the
498-
* case of a positive value, prevent caching if given a 0 value, else
499-
* do nothing (i.e. leave caching to the client).
500-
* @param response the current HTTP response
501-
* @param cacheSeconds the (positive) number of seconds into the future
502-
* that the response should be cacheable for; 0 to prevent caching; and
503-
* a negative value to leave caching to the client.
504-
* @param mustRevalidate whether the client should revalidate the resource
505-
* (typically only necessary for controllers with last-modified support)
506-
* @deprecated as of 4.2, in favor of {@link #applyCacheControl}
507-
*/
508-
@Deprecated
509-
protected final void applyCacheSeconds(HttpServletResponse response, int cacheSeconds, boolean mustRevalidate) {
510-
if (cacheSeconds > 0) {
511-
cacheForSeconds(response, cacheSeconds, mustRevalidate);
512-
}
513-
else if (cacheSeconds == 0) {
514-
preventCaching(response);
515-
}
516-
}
517-
518-
/**
519-
* Set HTTP headers to allow caching for the given number of seconds.
520-
* Does not tell the browser to revalidate the resource.
521-
* @param response current HTTP response
522-
* @param seconds number of seconds into the future that the response
523-
* should be cacheable for
524-
* @deprecated as of 4.2, in favor of {@link #applyCacheControl}
525-
*/
526-
@Deprecated
527-
protected final void cacheForSeconds(HttpServletResponse response, int seconds) {
528-
cacheForSeconds(response, seconds, false);
529-
}
530-
531-
/**
532-
* Set HTTP headers to allow caching for the given number of seconds.
533-
* Tells the browser to revalidate the resource if mustRevalidate is
534-
* {@code true}.
535-
* @param response the current HTTP response
536-
* @param seconds number of seconds into the future that the response
537-
* should be cacheable for
538-
* @param mustRevalidate whether the client should revalidate the resource
539-
* (typically only necessary for controllers with last-modified support)
540-
* @deprecated as of 4.2, in favor of {@link #applyCacheControl}
541-
*/
542-
@Deprecated
543-
protected final void cacheForSeconds(HttpServletResponse response, int seconds, boolean mustRevalidate) {
544-
if (this.useExpiresHeader) {
545-
// HTTP 1.0 header
546-
response.setDateHeader(HEADER_EXPIRES, System.currentTimeMillis() + seconds * 1000L);
547-
}
548-
else if (response.containsHeader(HEADER_EXPIRES)) {
549-
// Reset HTTP 1.0 Expires header if present
550-
response.setHeader(HEADER_EXPIRES, "");
551-
}
552-
553-
if (this.useCacheControlHeader) {
554-
// HTTP 1.1 header
555-
String headerValue = "max-age=" + seconds;
556-
if (mustRevalidate || this.alwaysMustRevalidate) {
557-
headerValue += ", must-revalidate";
558-
}
559-
response.setHeader(HEADER_CACHE_CONTROL, headerValue);
560-
}
561-
562-
if (response.containsHeader(HEADER_PRAGMA)) {
563-
// Reset HTTP 1.0 Pragma header if present
564-
response.setHeader(HEADER_PRAGMA, "");
565-
}
566-
}
567-
568-
/**
569-
* Prevent the response from being cached.
570-
* Only called in HTTP 1.0 compatibility mode.
571-
* <p>See {@code https://www.mnot.net/cache_docs}.
572-
* @deprecated as of 4.2, in favor of {@link #applyCacheControl}
573-
*/
574-
@Deprecated
575-
protected final void preventCaching(HttpServletResponse response) {
576-
response.setHeader(HEADER_PRAGMA, "no-cache");
577-
578-
if (this.useExpiresHeader) {
579-
// HTTP 1.0 Expires header
580-
response.setDateHeader(HEADER_EXPIRES, 1L);
581-
}
582-
583-
if (this.useCacheControlHeader) {
584-
// HTTP 1.1 Cache-Control header: "no-cache" is the standard value,
585-
// "no-store" is necessary to prevent caching on Firefox.
586-
response.setHeader(HEADER_CACHE_CONTROL, "no-cache");
587-
if (this.useCacheControlNoStore) {
588-
response.addHeader(HEADER_CACHE_CONTROL, "no-store");
589-
}
590-
}
591-
}
592-
593-
594362
private Collection<String> getVaryRequestHeadersToAdd(HttpServletResponse response, String[] varyByRequestHeaders) {
595363
if (!response.containsHeader(HttpHeaders.VARY)) {
596364
return Arrays.asList(varyByRequestHeaders);

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

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -102,63 +102,6 @@ void emptyCacheConfiguration(Function<String, MockHttpServletRequest> requestFac
102102
assertThat(cacheControlHeaders).isEmpty();
103103
}
104104

105-
@PathPatternsParameterizedTest // SPR-13252, SPR-14053
106-
void cachingConfigAndPragmaHeader(Function<String, MockHttpServletRequest> requestFactory) throws Exception {
107-
response.setHeader("Pragma", "no-cache");
108-
response.setHeader("Expires", "0");
109-
110-
interceptor.setCacheSeconds(10);
111-
interceptor.preHandle(requestFactory.apply("/"), response, handler);
112-
113-
assertThat(response.getHeader("Pragma")).isEmpty();
114-
assertThat(response.getHeader("Expires")).isEmpty();
115-
}
116-
117-
@SuppressWarnings("deprecation")
118-
@PathPatternsParameterizedTest // SPR-13252, SPR-14053
119-
void http10CachingConfigAndPragmaHeader(Function<String, MockHttpServletRequest> requestFactory) throws Exception {
120-
response.setHeader("Pragma", "no-cache");
121-
response.setHeader("Expires", "0");
122-
123-
interceptor.setCacheSeconds(10);
124-
interceptor.setAlwaysMustRevalidate(true);
125-
interceptor.preHandle(requestFactory.apply("/"), response, handler);
126-
127-
assertThat(response.getHeader("Pragma")).isEmpty();
128-
assertThat(response.getHeader("Expires")).isEmpty();
129-
}
130-
131-
@SuppressWarnings("deprecation")
132-
@PathPatternsParameterizedTest
133-
void http10CachingConfigAndSpecificMapping(Function<String, MockHttpServletRequest> requestFactory) throws Exception {
134-
interceptor.setCacheSeconds(0);
135-
interceptor.setUseExpiresHeader(true);
136-
interceptor.setAlwaysMustRevalidate(true);
137-
Properties mappings = new Properties();
138-
mappings.setProperty("/*/*.cache.html", "10");
139-
interceptor.setCacheMappings(mappings);
140-
141-
MockHttpServletRequest request = requestFactory.apply("/foo/page.html");
142-
MockHttpServletResponse response = new MockHttpServletResponse();
143-
interceptor.preHandle(request, response, handler);
144-
145-
Iterable<String> expiresHeaders = response.getHeaders("Expires");
146-
assertThat(expiresHeaders).hasSize(1);
147-
Iterable<String> cacheControlHeaders = response.getHeaders("Cache-Control");
148-
assertThat(cacheControlHeaders).containsExactly("no-cache", "no-store");
149-
Iterable<String> pragmaHeaders = response.getHeaders("Pragma");
150-
assertThat(pragmaHeaders).containsExactly("no-cache");
151-
152-
request = requestFactory.apply("/foo/page.cache.html");
153-
response = new MockHttpServletResponse();
154-
interceptor.preHandle(request, response, handler);
155-
156-
expiresHeaders = response.getHeaders("Expires");
157-
assertThat(expiresHeaders).hasSize(1);
158-
cacheControlHeaders = response.getHeaders("Cache-Control");
159-
assertThat(cacheControlHeaders).containsExactly("max-age=10, must-revalidate");
160-
}
161-
162105
@Test
163106
void throwsExceptionWithNullPathMatcher() {
164107
assertThatIllegalArgumentException()

0 commit comments

Comments
 (0)