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)