Ensure patterns are absolute 96/102396/2
authorOleksandrZharov <Oleksandr.Zharov@pantheon.tech>
Fri, 16 Sep 2022 09:18:26 +0000 (11:18 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Fri, 16 Sep 2022 10:47:46 +0000 (12:47 +0200)
The contract in web-api does not spell out the requirement for patterns
to conform to servlet spec. Jetty implementation needs to ensure they
start with a '/' just like the OSGi implementation does.

JIRA: AAA-232
Change-Id: I34879163596872e4e497a13c3b60111a317feadd
Signed-off-by: OleksandrZharov <Oleksandr.Zharov@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
web/impl-jetty/src/main/java/org/opendaylight/aaa/web/jetty/JettyWebServer.java

index 137855c8740ab55457a688d87eaa1f635a516c56..bd811c26599e49bb9d7dbb1cbc2648a604ef8989 100644 (file)
@@ -92,8 +92,7 @@ public class JettyWebServer implements WebServer {
 
     @Override
     public synchronized Registration registerWebContext(final WebContext webContext) throws ServletException {
-        String contextPathWithSlashPrefix = webContext.contextPath().startsWith("/")
-                ? webContext.contextPath() : "/" + webContext.contextPath();
+        String contextPathWithSlashPrefix = ensureAbsolutePath(webContext.contextPath());
         ServletContextHandler handler = new ServletContextHandler(contextHandlerCollection, contextPathWithSlashPrefix,
                 webContext.supportsSessions() ? ServletContextHandler.SESSIONS : ServletContextHandler.NO_SESSIONS);
 
@@ -112,7 +111,8 @@ public class JettyWebServer implements WebServer {
             FilterHolder filterHolder = new FilterHolder(filter.filter());
             filterHolder.setInitParameters(filter.initParams());
             filter.urlPatterns().forEach(
-                urlPattern -> handler.addFilter(filterHolder, urlPattern, EnumSet.allOf(DispatcherType.class))
+                urlPattern -> handler.addFilter(filterHolder, ensureAbsolutePath(urlPattern),
+                    EnumSet.allOf(DispatcherType.class))
             );
         });
 
@@ -124,7 +124,7 @@ public class JettyWebServer implements WebServer {
             // AKA <load-on-startup> 1
             servletHolder.setInitOrder(1);
             servlet.urlPatterns().forEach(
-                urlPattern -> handler.addServlet(servletHolder, urlPattern)
+                urlPattern -> handler.addServlet(servletHolder, ensureAbsolutePath(urlPattern))
             );
         });
 
@@ -155,4 +155,8 @@ public class JettyWebServer implements WebServer {
         }
         contextHandlerCollection.removeHandler(handler);
     }
+
+    private static String ensureAbsolutePath(final String path) {
+        return path.startsWith("/") ? path : "/" + path;
+    }
 }