summaryrefslogtreecommitdiffstats
path: root/jdisc_http_service/src/main
diff options
context:
space:
mode:
authorgjoranv <gv@yahoo-inc.com>2017-03-08 16:17:36 +0100
committergjoranv <gv@yahoo-inc.com>2017-03-08 16:22:49 +0100
commita71f30e3df4d4f6240c070af9bab30f764f3eaa3 (patch)
tree1050b11d2cfe06fb4a910e176e26a4eaca6fb108 /jdisc_http_service/src/main
parent7d99c6f7dd5760a941fbd7941249447605d3ab1c (diff)
Allow retrieving headers from response filters, via RequestView.
Diffstat (limited to 'jdisc_http_service/src/main')
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/RequestView.java21
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/SecurityFilterInvoker.java14
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/SecurityResponseFilterChain.java15
3 files changed, 46 insertions, 4 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/RequestView.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/RequestView.java
index f03a16f0bf0..dcee10cede2 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/RequestView.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/RequestView.java
@@ -3,7 +3,9 @@ package com.yahoo.jdisc.http.filter;
import com.yahoo.jdisc.http.HttpRequest.Method;
+import javax.annotation.Nonnull;
import java.net.URI;
+import java.util.List;
import java.util.Optional;
/**
@@ -20,13 +22,26 @@ public interface RequestView {
* @see com.yahoo.jdisc.Request#context()
* @return the named data associated with the request that are private to this runtime (not exposed to the client)
*/
- public Object getAttribute(String name);
+ Object getAttribute(String name);
+
+ /**
+ * Returns an immutable view of all values of a named header field.
+ * Returns an empty list if no such header is present.
+ */
+ @Nonnull
+ List<String> getHeaders(String name);
+
+ /**
+ * Convenience method for retrieving the first value of a named header field.
+ * Returns empty if the header is not set, or if the value list is empty.
+ */
+ Optional<String> getFirstHeader(String name);
/**
* Returns the Http method. Only present if the underlying request has http-like semantics.
*/
- public Optional<Method> getMethod();
+ Optional<Method> getMethod();
- public URI getUri();
+ URI getUri();
}
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/SecurityFilterInvoker.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/SecurityFilterInvoker.java
index 2bcb1635dfb..2b53402451c 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/SecurityFilterInvoker.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/SecurityFilterInvoker.java
@@ -9,9 +9,12 @@ import com.yahoo.jdisc.http.servlet.ServletRequest;
import com.yahoo.jdisc.http.servlet.ServletResponse;
import com.yahoo.jdisc.http.server.jetty.FilterInvoker;
+import javax.annotation.Nonnull;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URI;
+import java.util.Collections;
+import java.util.List;
import java.util.Optional;
/**
@@ -82,6 +85,17 @@ public class SecurityFilterInvoker implements FilterInvoker {
return request.getAttribute(name);
}
+
+ @Nonnull @Override
+ public List<String> getHeaders(String name) {
+ return Collections.unmodifiableList(Collections.list(request.getHeaders(name)));
+ }
+
+ @Override
+ public Optional<String> getFirstHeader(String name) {
+ return getHeaders(name).stream().findFirst();
+ }
+
@Override
public Optional<Method> getMethod() {
return Optional.of(Method.valueOf(request.getMethod()));
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/SecurityResponseFilterChain.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/SecurityResponseFilterChain.java
index ae4ea34e45c..ae03f5fcb59 100644
--- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/SecurityResponseFilterChain.java
+++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/filter/SecurityResponseFilterChain.java
@@ -14,6 +14,8 @@ import com.yahoo.jdisc.Response;
import com.yahoo.jdisc.http.HttpRequest;
import com.yahoo.jdisc.http.HttpResponse;
+import javax.annotation.Nonnull;
+
/**
* Implementation of TypedFilterChain for DiscFilterResponse
* @author tejalk
@@ -58,7 +60,7 @@ public class SecurityResponseFilterChain extends AbstractResource implements Res
return Collections.unmodifiableList(filters);
}
- private static class RequestViewImpl implements RequestView {
+ static class RequestViewImpl implements RequestView {
private final Request request;
private final Optional<HttpRequest.Method> method;
@@ -75,6 +77,17 @@ public class SecurityResponseFilterChain extends AbstractResource implements Res
return request.context().get(name);
}
+ @Nonnull @Override
+ public List<String> getHeaders(String name) {
+ List<String> headers = request.headers().get(name);
+ return headers == null ? Collections.emptyList() : Collections.unmodifiableList(headers);
+ }
+
+ @Override
+ public Optional<String> getFirstHeader(String name) {
+ return getHeaders(name).stream().findFirst();
+ }
+
@Override
public Optional<HttpRequest.Method> getMethod() {
return method;