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

Reply via email to