This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 4e11b9eba0955dd0afb8bcbd311bb71261839fdb Author: TungTV <vtt...@linagora.com> AuthorDate: Tue Feb 11 10:48:58 2025 +0700 JAMES-4104 [webadmin] Modify spark configuration - Allow to accept ambiguous uris --- .../main/java/org/apache/james/webadmin/WebAdminServer.java | 11 +++++++++++ .../james/webadmin/jettyserver/EmbeddedJettyServer.java | 6 ++---- .../james/webadmin/jettyserver/SocketConnectorFactory.java | 3 +++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java index 51bea7b2f8..21ba45f193 100644 --- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java +++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java @@ -40,6 +40,7 @@ import org.apache.james.lifecycle.api.Startable; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.util.Port; import org.apache.james.webadmin.authentication.AuthenticationFilter; +import org.apache.james.webadmin.jettyserver.EmbeddedJettyFactory; import org.apache.james.webadmin.mdc.LoggingRequestFilter; import org.apache.james.webadmin.mdc.LoggingResponseFilter; import org.apache.james.webadmin.mdc.MDCCleanupFilter; @@ -58,6 +59,7 @@ import com.google.common.collect.ImmutableList; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; import spark.Service; +import spark.embeddedserver.EmbeddedServers; public class WebAdminServer implements Startable { private static final Logger LOGGER = LoggerFactory.getLogger(WebAdminServer.class); @@ -73,6 +75,10 @@ public class WebAdminServer implements Startable { private final MetricFactory metricFactory; private final LoggingRequestFilter loggingRequestFilter; + public enum Identifiers { + JAMES_JETTY + } + @Inject protected WebAdminServer(WebAdminConfiguration configuration, @Named("webAdminRoutes") List<Routes> routesList, @@ -85,6 +91,10 @@ public class WebAdminServer implements Startable { this.authenticationFilter = authenticationFilter; this.metricFactory = metricFactory; this.loggingRequestFilter = loggingRequestFilter; + + EmbeddedServers.add( + Identifiers.JAMES_JETTY, + new EmbeddedJettyFactory()); this.service = Service.ignite(); } @@ -102,6 +112,7 @@ public class WebAdminServer implements Startable { } public WebAdminServer start() { + service.embeddedServerIdentifier(Identifiers.JAMES_JETTY); service.initExceptionHandler(e -> { throw new RuntimeException(e); }); diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/jettyserver/EmbeddedJettyServer.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/jettyserver/EmbeddedJettyServer.java index 3a4b6e9c64..f576b2aa8b 100644 --- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/jettyserver/EmbeddedJettyServer.java +++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/jettyserver/EmbeddedJettyServer.java @@ -28,7 +28,6 @@ import java.util.Optional; import jakarta.servlet.DispatcherType; import org.eclipse.jetty.ee10.servlet.ServletContextHandler; -import org.eclipse.jetty.ee10.servlet.SessionHandler; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.ServerConnector; @@ -39,7 +38,6 @@ import org.slf4j.LoggerFactory; import spark.embeddedserver.EmbeddedServer; import spark.embeddedserver.VirtualThreadAware; import spark.embeddedserver.jetty.JettyServerFactory; -import spark.embeddedserver.jetty.SocketConnectorFactory; import spark.embeddedserver.jetty.websocket.WebSocketHandlerWrapper; import spark.embeddedserver.jetty.websocket.WebSocketServletContextHandlerFactory; import spark.http.matching.MatcherFilter; @@ -139,12 +137,12 @@ public class EmbeddedJettyServer extends VirtualThreadAware.Proxy implements Emb final ServletContextHandler servletContextHandler = webSocketServletContextHandler == null ? new ServletContextHandler() : webSocketServletContextHandler; - final SessionHandler sessionHandler = new SessionHandler(); + final JettyHandler sessionHandler = new JettyHandler(matcherFilter); sessionHandler.getSessionCookieConfig().setHttpOnly(httpOnly); servletContextHandler.setSessionHandler(sessionHandler); servletContextHandler.addFilter(matcherFilter, "/*", EnumSet.allOf(DispatcherType.class)); - + servletContextHandler.getServletHandler().setDecodeAmbiguousURIs(true); server.setHandler(servletContextHandler); logger.info("== {} has ignited ...", NAME); diff --git a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/jettyserver/SocketConnectorFactory.java b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/jettyserver/SocketConnectorFactory.java index 30e529fc26..5884a6c078 100644 --- a/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/jettyserver/SocketConnectorFactory.java +++ b/server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/jettyserver/SocketConnectorFactory.java @@ -22,6 +22,7 @@ package org.apache.james.webadmin.jettyserver; import java.lang.reflect.Field; import java.util.concurrent.TimeUnit; +import org.eclipse.jetty.http.UriCompliance; import org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory; import org.eclipse.jetty.server.AbstractConnectionFactory; import org.eclipse.jetty.server.ForwardedRequestCustomizer; @@ -153,6 +154,7 @@ public class SocketConnectorFactory { private static HttpConnectionFactory createHttpConnectionFactory(boolean trustForwardHeaders) { HttpConfiguration httpConfig = new HttpConfiguration(); + httpConfig.setUriCompliance(UriCompliance.UNSAFE); httpConfig.setSecureScheme("https"); if (trustForwardHeaders) { httpConfig.addCustomizer(new ForwardedRequestCustomizer()); @@ -162,6 +164,7 @@ public class SocketConnectorFactory { private static HTTP2ServerConnectionFactory createHttp2ConnectionFactory(boolean trustForwardHeaders) { HttpConfiguration httpConfig = new HttpConfiguration(); + httpConfig.setUriCompliance(UriCompliance.UNSAFE); httpConfig.setSecureScheme("https"); if (trustForwardHeaders) { httpConfig.addCustomizer(new ForwardedRequestCustomizer()); --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org