From 2dcf52797c3145a981585595ecec0af00ff04304 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 2 Sep 2015 18:42:43 +0200 Subject: [PATCH] Consistent and defensive Servlet 3.0 method calls across Spring's web abstraction (in particular, also working in debug mode where method references may get resolved early, so ternary expressions are to be avoided) --- .../http/server/ServletServerHttpResponse.java | 5 +++-- .../web/filter/ShallowEtagHeaderFilter.java | 10 ++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java index 180ef8576dd..e8bf33465f8 100644 --- a/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java +++ b/spring-web/src/main/java/org/springframework/http/server/ServletServerHttpResponse.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,6 +39,7 @@ import org.springframework.util.CollectionUtils; */ public class ServletServerHttpResponse implements ServerHttpResponse { + /** Checking for Servlet 3.0+ HttpServletResponse.getHeader(String) */ private static final boolean servlet3Present = ClassUtils.hasMethod(HttpServletResponse.class, "getHeader", String.class); @@ -55,7 +56,7 @@ public class ServletServerHttpResponse implements ServerHttpResponse { * @param servletResponse the servlet response */ public ServletServerHttpResponse(HttpServletResponse servletResponse) { - Assert.notNull(servletResponse, "'servletResponse' must not be null"); + Assert.notNull(servletResponse, "HttpServletResponse must not be null"); this.servletResponse = servletResponse; this.headers = (servlet3Present ? new ServletResponseHttpHeaders() : new HttpHeaders()); } diff --git a/spring-web/src/main/java/org/springframework/web/filter/ShallowEtagHeaderFilter.java b/spring-web/src/main/java/org/springframework/web/filter/ShallowEtagHeaderFilter.java index 187cc7374fd..a9134d278bd 100644 --- a/spring-web/src/main/java/org/springframework/web/filter/ShallowEtagHeaderFilter.java +++ b/spring-web/src/main/java/org/springframework/web/filter/ShallowEtagHeaderFilter.java @@ -57,7 +57,7 @@ public class ShallowEtagHeaderFilter extends OncePerRequestFilter { /** Checking for Servlet 3.0+ HttpServletResponse.getHeader(String) */ - private static final boolean responseGetHeaderAvailable = + private static final boolean servlet3Present = ClassUtils.hasMethod(HttpServletResponse.class, "getHeader", String.class); @@ -149,9 +149,11 @@ public class ShallowEtagHeaderFilter extends OncePerRequestFilter { protected boolean isEligibleForEtag(HttpServletRequest request, HttpServletResponse response, int responseStatusCode, byte[] responseBody) { - if (responseStatusCode >= 200 && responseStatusCode < 300 && - HttpMethod.GET.name().equals(request.getMethod())) { - String cacheControl = (responseGetHeaderAvailable ? response.getHeader(HEADER_CACHE_CONTROL) : null); + if (responseStatusCode >= 200 && responseStatusCode < 300 && HttpMethod.GET.name().equals(request.getMethod())) { + String cacheControl = null; + if (servlet3Present) { + cacheControl = response.getHeader(HEADER_CACHE_CONTROL); + } if (cacheControl == null || !cacheControl.contains(DIRECTIVE_NO_STORE)) { return true; }