diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-12-03 11:07:37 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-12-03 12:34:52 +0100 |
commit | 203c887fba0cd6fbd0cfc813742c45b37bbb8065 (patch) | |
tree | 62793c537676696c640c4cc5cb08bcb10c3dc600 /container-core/src/main/java/com/yahoo | |
parent | e04f95504e5469ae7e30dddc7cab69fdb5973004 (diff) |
Make DiscFilterRequest non-abstract and deprecate JdiscFilterRequest
There is no need for having DiscFilterRequest as an abstract class after removing servlet support.
Diffstat (limited to 'container-core/src/main/java/com/yahoo')
3 files changed, 57 insertions, 134 deletions
diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterRequest.java b/container-core/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterRequest.java index 9b799e3a68f..8ac2305f5df 100644 --- a/container-core/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterRequest.java +++ b/container-core/src/main/java/com/yahoo/jdisc/http/filter/DiscFilterRequest.java @@ -7,6 +7,7 @@ import com.yahoo.jdisc.http.Cookie; import com.yahoo.jdisc.http.HttpHeaders; import com.yahoo.jdisc.http.HttpRequest; import com.yahoo.jdisc.http.HttpRequest.Version; +import com.yahoo.jdisc.http.server.jetty.RequestUtils; import java.net.InetSocketAddress; import java.net.URI; @@ -15,6 +16,7 @@ import java.security.cert.X509Certificate; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Date; import java.util.Enumeration; @@ -22,15 +24,14 @@ import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; /** * The Request class on which all filters will operate upon. - * Test cases that need a concrete - * instance should create a {@link JdiscFilterRequest}. */ -public abstract class DiscFilterRequest { +public class DiscFilterRequest { protected static final String HTTPS_PREFIX = "https"; protected static final int DEFAULT_HTTP_PORT = 80; @@ -54,7 +55,7 @@ public abstract class DiscFilterRequest { untreatedParams = new HashMap<>(parent.parameters()); } - public abstract String getMethod(); + public String getMethod() { return parent.getMethod().name(); } public Version getVersion() { return parent.getVersion(); @@ -65,8 +66,12 @@ public abstract class DiscFilterRequest { } @Deprecated - public abstract void setUri(URI uri); + public void setUri(URI uri) { parent.setUri(uri); } + /** + * @deprecated Use methods on {@link DiscFilterRequest} instead to inspect request + */ + @Deprecated(forRemoval = true, since = "7.511") public HttpRequest getParentRequest() { throw new UnsupportedOperationException("getParentRequest is not supported for " + parent.getClass().getName()); } @@ -124,9 +129,18 @@ public abstract class DiscFilterRequest { parent.context().remove(name); } - public abstract String getParameter(String name); + public String getParameter(String name) { + if(parent.parameters().containsKey(name)) { + return parent.parameters().get(name).get(0); + } + else { + return null; + } + } - public abstract Enumeration<String> getParameterNames(); + public Enumeration<String> getParameterNames() { + return Collections.enumeration(parent.parameters().keySet()); + } public List<String> getParameterNamesAsList() { return new ArrayList<String>(parent.parameters().keySet()); @@ -199,7 +213,9 @@ public abstract class DiscFilterRequest { * Sets a header with the given name and value. * If the header had already been set, the new value overwrites the previous one. */ - public abstract void addHeader(String name, String value); + public void addHeader(String name, String value) { + parent.headers().add(name, value); + } public long getDateHeader(String name) { String value = getHeader(name); @@ -220,31 +236,43 @@ public abstract class DiscFilterRequest { return date.getTime(); } - public abstract String getHeader(String name); + public String getHeader(String name) { + List<String> values = parent.headers().get(name); + if (values == null || values.isEmpty()) { + return null; + } + return values.get(values.size() - 1); + } - public abstract Enumeration<String> getHeaderNames(); + public Enumeration<String> getHeaderNames() { return Collections.enumeration(parent.headers().keySet()); } - public abstract List<String> getHeaderNamesAsList(); + public List<String> getHeaderNamesAsList() { return new ArrayList<>(parent.headers().keySet()); } - public abstract Enumeration<String> getHeaders(String name); + public Enumeration<String> getHeaders(String name) { return Collections.enumeration(getHeadersAsList(name)); } - public abstract List<String> getHeadersAsList(String name); + public List<String> getHeadersAsList(String name) { + List<String> values = parent.headers().get(name); + if(values == null) { + return Collections.emptyList(); + } + return parent.headers().get(name); + } - public abstract void removeHeaders(String name); + public void removeHeaders(String name) { parent.headers().remove(name); } /** * Sets a header with the given name and value. * If the header had already been set, the new value overwrites the previous one. * */ - public abstract void setHeaders(String name, String value); + public void setHeaders(String name, String value) { parent.headers().put(name, value); } /** * Sets a header with the given name and value. * If the header had already been set, the new value overwrites the previous one. * */ - public abstract void setHeaders(String name, List<String> values); + public void setHeaders(String name, List<String> values) { parent.headers().put(name, values); } public int getIntHeader(String name) { String value = getHeader(name); @@ -339,7 +367,7 @@ public abstract class DiscFilterRequest { return port; } - public abstract Principal getUserPrincipal(); + public Principal getUserPrincipal() { return parent.getUserPrincipal(); } public boolean isSecure() { if(getScheme().equalsIgnoreCase(HTTPS_PREFIX)) { @@ -382,13 +410,18 @@ public abstract class DiscFilterRequest { this.remoteUser = remoteUser; } - public abstract void setUserPrincipal(Principal principal); + public void setUserPrincipal(Principal principal) { this.parent.setUserPrincipal(principal); } /** * @return The client certificate chain in ascending order of trust. The first certificate is the one sent from the client. * Returns an empty list if the client did not provide a certificate. */ - public abstract List<X509Certificate> getClientCertificateChain(); + public List<X509Certificate> getClientCertificateChain() { + return Optional.ofNullable(parent.context().get(RequestUtils.JDISC_REQUEST_X509CERT)) + .map(X509Certificate[].class::cast) + .map(Arrays::asList) + .orElse(Collections.emptyList()); + } public void setUserRoles(String[] roles) { this.roles = roles; @@ -436,7 +469,7 @@ public abstract class DiscFilterRequest { } } - public abstract void clearCookies(); + public void clearCookies() { parent.headers().remove(HttpHeaders.Names.COOKIE); } public JDiscCookieWrapper[] getWrappedCookies() { List<Cookie> cookies = getCookies(); diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/filter/JdiscFilterRequest.java b/container-core/src/main/java/com/yahoo/jdisc/http/filter/JdiscFilterRequest.java index f78c03f7af7..aa4050dd963 100644 --- a/container-core/src/main/java/com/yahoo/jdisc/http/filter/JdiscFilterRequest.java +++ b/container-core/src/main/java/com/yahoo/jdisc/http/filter/JdiscFilterRequest.java @@ -1,25 +1,13 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.jdisc.http.filter; -import com.yahoo.jdisc.http.HttpHeaders; import com.yahoo.jdisc.http.HttpRequest; -import com.yahoo.jdisc.http.server.jetty.RequestUtils; - -import java.net.URI; -import java.security.Principal; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Enumeration; -import java.util.List; -import java.util.Optional; /** * JDisc implementation of a filter request. * - * @since 5.27 */ +@Deprecated(forRemoval = true, since = "7.511") public class JdiscFilterRequest extends DiscFilterRequest { private final HttpRequest parent; @@ -29,106 +17,8 @@ public class JdiscFilterRequest extends DiscFilterRequest { this.parent = parent; } - public HttpRequest getParentRequest() { - return parent; - } - - @Deprecated - public void setUri(URI uri) { - parent.setUri(uri); - } - - @Override - public String getMethod() { - return parent.getMethod().name(); - } - - @Override - public String getParameter(String name) { - if(parent.parameters().containsKey(name)) { - return parent.parameters().get(name).get(0); - } - else { - return null; - } - } - - @Override - public Enumeration<String> getParameterNames() { - return Collections.enumeration(parent.parameters().keySet()); - } - - @Override - public void addHeader(String name, String value) { - parent.headers().add(name, value); - } - - @Override - public String getHeader(String name) { - List<String> values = parent.headers().get(name); - if (values == null || values.isEmpty()) { - return null; - } - return values.get(values.size() - 1); - } - - public Enumeration<String> getHeaderNames() { - return Collections.enumeration(parent.headers().keySet()); - } - - public List<String> getHeaderNamesAsList() { - return new ArrayList<String>(parent.headers().keySet()); - } - + @SuppressWarnings("removal") @Override - public Enumeration<String> getHeaders(String name) { - return Collections.enumeration(getHeadersAsList(name)); - } - - public List<String> getHeadersAsList(String name) { - List<String> values = parent.headers().get(name); - if(values == null) { - return Collections.<String>emptyList(); - } - return parent.headers().get(name); - } - - @Override - public void removeHeaders(String name) { - parent.headers().remove(name); - } - - @Override - public void setHeaders(String name, String value) { - parent.headers().put(name, value); - } - - @Override - public void setHeaders(String name, List<String> values) { - parent.headers().put(name, values); - } - - @Override - public Principal getUserPrincipal() { - return parent.getUserPrincipal(); - } - - @Override - public void setUserPrincipal(Principal principal) { - this.parent.setUserPrincipal(principal); - } - - @Override - public List<X509Certificate> getClientCertificateChain() { - return Optional.ofNullable(parent.context().get(RequestUtils.JDISC_REQUEST_X509CERT)) - .map(X509Certificate[].class::cast) - .map(Arrays::asList) - .orElse(Collections.emptyList()); - } - - @Override - public void clearCookies() { - parent.headers().remove(HttpHeaders.Names.COOKIE); - } + public HttpRequest getParentRequest() { return parent; } } diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/filter/SecurityRequestFilterChain.java b/container-core/src/main/java/com/yahoo/jdisc/http/filter/SecurityRequestFilterChain.java index 0c81d919f0e..554a83a240f 100644 --- a/container-core/src/main/java/com/yahoo/jdisc/http/filter/SecurityRequestFilterChain.java +++ b/container-core/src/main/java/com/yahoo/jdisc/http/filter/SecurityRequestFilterChain.java @@ -30,7 +30,7 @@ public final class SecurityRequestFilterChain extends AbstractResource implement @Override public void filter(HttpRequest request, ResponseHandler responseHandler) { - DiscFilterRequest discFilterRequest = new JdiscFilterRequest(request); + DiscFilterRequest discFilterRequest = new DiscFilterRequest(request); filter(discFilterRequest, responseHandler); } |