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 180ef8576d..e8bf33465f 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 187cc7374f..a9134d278b 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; }