From 9f6da9a11e6fa194f3ab22df2343a0e744bdf3f2 Mon Sep 17 00:00:00 2001 From: Lachlan Roberts Date: Fri, 18 Aug 2023 12:42:03 +1000 Subject: [PATCH] add some javadoc and cleanup to Request.get Signed-off-by: Lachlan Roberts --- .../eclipse/jetty/security/AuthenticationState.java | 9 +++++++++ .../main/java/org/eclipse/jetty/server/Request.java | 11 +++-------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/jetty-core/jetty-security/src/main/java/org/eclipse/jetty/security/AuthenticationState.java b/jetty-core/jetty-security/src/main/java/org/eclipse/jetty/security/AuthenticationState.java index c148ae0b247..f023cf939cd 100644 --- a/jetty-core/jetty-security/src/main/java/org/eclipse/jetty/security/AuthenticationState.java +++ b/jetty-core/jetty-security/src/main/java/org/eclipse/jetty/security/AuthenticationState.java @@ -271,6 +271,10 @@ public interface AuthenticationState extends Request.AuthenticationState } }; + /** + * The {@link SecurityHandler} will use this to wrap the {@link Request}. + * And then will return a {@link Deferred} authentication to bypass security constraints. + */ class ServeAs implements AuthenticationState { private final HttpURI _uri; @@ -295,6 +299,11 @@ public interface AuthenticationState extends Request.AuthenticationState }; } + /** + * This interface can be used inside a {@link ServeAs} implementation to wrap the request + * changing its target to a given path. If a {@link Request} implements this interface it can + * be obtained with the {@link Request#as(Request, Class)} method. + */ public interface Path { Request serveAs(Request request, String path); diff --git a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java index c533bc989fb..a2bda5995af 100644 --- a/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java +++ b/jetty-core/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java @@ -790,15 +790,10 @@ public interface Request extends Attributes, Content.Source } @SuppressWarnings("unchecked") - static R get(Request request, Class type, Function getter) + static R get(Request request, Class type, Function getter) { - while (request instanceof Request.Wrapper wrapper) - { - if (type.isInstance(wrapper)) - return getter.apply((T)wrapper); - request = wrapper.getWrapped(); - } - return null; + T t = Request.as(request, type); + return (t == null) ? null : getter.apply(t); } static Request unWrap(Request request)