You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2018/07/06 16:20:19 UTC
svn commit: r1835263 - in /tomcat/trunk:
java/org/apache/tomcat/util/http/ResponseUtil.java
test/org/apache/tomcat/util/http/TestResponseUtil.java
Author: markt
Date: Fri Jul 6 16:20:19 2018
New Revision: 1835263
URL: http://svn.apache.org/viewvc?rev=1835263&view=rev
Log:
Expand code for adding Vary header value to support all current potential uses in Tomcat code base.
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/ResponseUtil.java
tomcat/trunk/test/org/apache/tomcat/util/http/TestResponseUtil.java
Modified: tomcat/trunk/java/org/apache/tomcat/util/http/ResponseUtil.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/ResponseUtil.java?rev=1835263&r1=1835262&r2=1835263&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/http/ResponseUtil.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/http/ResponseUtil.java Fri Jul 6 16:20:19 2018
@@ -18,8 +18,11 @@ package org.apache.tomcat.util.http;
import java.io.IOException;
import java.io.StringReader;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Enumeration;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletResponse;
@@ -36,8 +39,19 @@ public class ResponseUtil {
}
+ public static void addVaryFieldName(MimeHeaders headers, String name) {
+ addVaryFieldName(new HeaderAdapter(headers), name);
+ }
+
+
public static void addVaryFieldName(HttpServletResponse response, String name) {
- Collection<String> varyHeaders = response.getHeaders(VARY_HEADER);
+ addVaryFieldName(new ResponseAdapter(response), name);
+ }
+
+
+ private static void addVaryFieldName(Adapter adapter, String name) {
+
+ Collection<String> varyHeaders = adapter.getHeaders(VARY_HEADER);
// Short-cut if only * has been set
if (varyHeaders.size() == 1 && varyHeaders.iterator().next().trim().equals(VARY_ALL)) {
@@ -47,13 +61,13 @@ public class ResponseUtil {
// Short-cut if no headers have been set
if (varyHeaders.size() == 0) {
- response.addHeader(VARY_HEADER, name);
+ adapter.addHeader(VARY_HEADER, name);
return;
}
// Short-cut if "*" is added
if (VARY_ALL.equals(name.trim())) {
- response.setHeader(VARY_HEADER, VARY_ALL);
+ adapter.setHeader(VARY_HEADER, VARY_ALL);
return;
}
@@ -75,7 +89,7 @@ public class ResponseUtil {
if (fieldNames.contains(VARY_ALL)) {
// '*' has been added without removing other values. Optimise.
- response.setHeader(VARY_HEADER, VARY_ALL);
+ adapter.setHeader(VARY_HEADER, VARY_ALL);
return;
}
@@ -88,6 +102,69 @@ public class ResponseUtil {
varyHeader.append(',');
varyHeader.append(fieldName);
}
- response.setHeader(VARY_HEADER, varyHeader.toString());
+ adapter.setHeader(VARY_HEADER, varyHeader.toString());
+ }
+
+
+ private static interface Adapter {
+
+ Collection<String> getHeaders(String name);
+
+ void setHeader(String name, String value);
+
+ void addHeader(String name, String value);
+ }
+
+
+ private static final class HeaderAdapter implements Adapter {
+ private final MimeHeaders headers;
+
+ public HeaderAdapter(MimeHeaders headers) {
+ this.headers = headers;
+ }
+
+ @Override
+ public Collection<String> getHeaders(String name) {
+ Enumeration<String> values = headers.values(name);
+ List<String> result = new ArrayList<>();
+ while (values.hasMoreElements()) {
+ result.add(values.nextElement());
+ }
+ return result;
+ }
+
+ @Override
+ public void setHeader(String name, String value) {
+ headers.setValue(name).setString(value);
+ }
+
+ @Override
+ public void addHeader(String name, String value) {
+ headers.addValue(name).setString(value);
+ }
+ }
+
+
+ private static final class ResponseAdapter implements Adapter {
+ private final HttpServletResponse response;
+
+ public ResponseAdapter(HttpServletResponse response) {
+ this.response = response;
+ }
+
+ @Override
+ public Collection<String> getHeaders(String name) {
+ return response.getHeaders(name);
+ }
+
+ @Override
+ public void setHeader(String name, String value) {
+ response.setHeader(name, value);
+ }
+
+ @Override
+ public void addHeader(String name, String value) {
+ response.addHeader(name, value);
+ }
}
}
Modified: tomcat/trunk/test/org/apache/tomcat/util/http/TestResponseUtil.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/http/TestResponseUtil.java?rev=1835263&r1=1835262&r2=1835263&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/http/TestResponseUtil.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/util/http/TestResponseUtil.java Fri Jul 6 16:20:19 2018
@@ -179,4 +179,39 @@ public class TestResponseUtil {
}
Assert.assertEquals(expected, result);
}
+
+
+ @Test
+ public void testMimeHeadersAddAllWithNone() {
+ MimeHeaders mh = new MimeHeaders();
+ Set<String> expected = new HashSet<>();
+ expected.add("*");
+ doTestAddVaryFieldName(mh, "*", expected);
+ }
+
+
+ @Test
+ public void testMimeHeadersAddValidWithValidHeaders() {
+ MimeHeaders mh = new MimeHeaders();
+ mh.addValue("vary").setString("foo");
+ mh.addValue("vary").setString("bar");
+ Set<String> expected = new HashSet<>();
+ expected.add("bar");
+ expected.add("foo");
+ expected.add("too");
+ doTestAddVaryFieldName(mh, "too", expected);
+ }
+
+ private void doTestAddVaryFieldName(MimeHeaders mh, String fieldName,
+ Set<String> expected) {
+ ResponseUtil.addVaryFieldName(mh, fieldName);
+ // There will now only be one Vary header
+ String resultHeader = mh.getHeader("vary");
+ Set<String> result = new HashSet<>();
+ // Deliberately do not use Vary.parseVary as it will skip invalid values.
+ for (String value : resultHeader.split(",")) {
+ result.add(value.trim());
+ }
+ Assert.assertEquals(expected, result);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org