Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/pathmap/ServletPathSpec.java')
-rw-r--r--jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/pathmap/ServletPathSpec.java272
1 files changed, 6 insertions, 266 deletions
diff --git a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/pathmap/ServletPathSpec.java b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/pathmap/ServletPathSpec.java
index b09b15b790..b24f3d8b0c 100644
--- a/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/pathmap/ServletPathSpec.java
+++ b/jetty-websocket/websocket-server/src/main/java/org/eclipse/jetty/websocket/server/pathmap/ServletPathSpec.java
@@ -18,274 +18,14 @@
package org.eclipse.jetty.websocket.server.pathmap;
-import org.eclipse.jetty.util.URIUtil;
-
-public class ServletPathSpec extends PathSpec
+/**
+ * @deprecated moved to jetty-http {@link org.eclipse.jetty.http.pathmap.ServletPathSpec} (this facade will be removed in Jetty 9.4)
+ */
+@Deprecated
+public class ServletPathSpec extends org.eclipse.jetty.http.pathmap.ServletPathSpec
{
- public static final String PATH_SPEC_SEPARATORS = ":,";
-
- /**
- * Get multi-path spec splits.
- *
- * @param servletPathSpec
- * the path spec that might contain multiple declared path specs
- * @return the individual path specs found.
- */
- public static ServletPathSpec[] getMultiPathSpecs(String servletPathSpec)
- {
- String pathSpecs[] = servletPathSpec.split(PATH_SPEC_SEPARATORS);
- int len = pathSpecs.length;
- ServletPathSpec sps[] = new ServletPathSpec[len];
- for (int i = 0; i < len; i++)
- {
- sps[i] = new ServletPathSpec(pathSpecs[i]);
- }
- return sps;
- }
-
public ServletPathSpec(String servletPathSpec)
{
- super();
- assertValidServletPathSpec(servletPathSpec);
-
- // The Path Spec for Default Servlet
- if ((servletPathSpec == null) || (servletPathSpec.length() == 0) || "/".equals(servletPathSpec))
- {
- super.pathSpec = "/";
- super.pathDepth = -1; // force this to be last in sort order
- this.specLength = 1;
- this.group = PathSpecGroup.DEFAULT;
- return;
- }
-
- this.specLength = servletPathSpec.length();
- super.pathDepth = 0;
- char lastChar = servletPathSpec.charAt(specLength - 1);
- // prefix based
- if ((servletPathSpec.charAt(0) == '/') && (specLength > 1) && (lastChar == '*'))
- {
- this.group = PathSpecGroup.PREFIX_GLOB;
- }
- // suffix based
- else if (servletPathSpec.charAt(0) == '*')
- {
- this.group = PathSpecGroup.SUFFIX_GLOB;
- }
- else
- {
- this.group = PathSpecGroup.EXACT;
- }
-
- for (int i = 0; i < specLength; i++)
- {
- int cp = servletPathSpec.codePointAt(i);
- if (cp < 128)
- {
- char c = (char)cp;
- switch (c)
- {
- case '/':
- super.pathDepth++;
- break;
- }
- }
- }
-
- super.pathSpec = servletPathSpec;
- }
-
- private void assertValidServletPathSpec(String servletPathSpec)
- {
- if ((servletPathSpec == null) || servletPathSpec.equals(""))
- {
- return; // empty path spec
- }
-
- // Ensure we don't have path spec separators here in our single path spec.
- for (char c : PATH_SPEC_SEPARATORS.toCharArray())
- {
- if (servletPathSpec.indexOf(c) >= 0)
- {
- throw new IllegalArgumentException("Servlet Spec 12.2 violation: encountered Path Spec Separator [" + PATH_SPEC_SEPARATORS
- + "] within specified path spec. did you forget to split this path spec up?");
- }
- }
-
- int len = servletPathSpec.length();
- // path spec must either start with '/' or '*.'
- if (servletPathSpec.charAt(0) == '/')
- {
- // Prefix Based
- if (len == 1)
- {
- return; // simple '/' path spec
- }
- int idx = servletPathSpec.indexOf('*');
- if (idx < 0)
- {
- return; // no hit on glob '*'
- }
- // only allowed to have '*' at the end of the path spec
- if (idx != (len - 1))
- {
- throw new IllegalArgumentException("Servlet Spec 12.2 violation: glob '*' can only exist at end of prefix based matches");
- }
- }
- else if (servletPathSpec.startsWith("*."))
- {
- // Suffix Based
- int idx = servletPathSpec.indexOf('/');
- // cannot have path separator
- if (idx >= 0)
- {
- throw new IllegalArgumentException("Servlet Spec 12.2 violation: suffix based path spec cannot have path separators");
- }
-
- idx = servletPathSpec.indexOf('*',2);
- // only allowed to have 1 glob '*', at the start of the path spec
- if (idx >= 1)
- {
- throw new IllegalArgumentException("Servlet Spec 12.2 violation: suffix based path spec cannot have multiple glob '*'");
- }
- }
- else
- {
- throw new IllegalArgumentException("Servlet Spec 12.2 violation: path spec must start with \"/\" or \"*.\"");
- }
- }
-
- @Override
- public String getPathInfo(String path)
- {
- // Path Info only valid for PREFIX_GLOB types
- if (group == PathSpecGroup.PREFIX_GLOB)
- {
- if (path.length() == (specLength - 2))
- {
- return null;
- }
- return path.substring(specLength - 2);
- }
-
- return null;
- }
-
- @Override
- public String getPathMatch(String path)
- {
- switch (group)
- {
- case EXACT:
- if (pathSpec.equals(path))
- {
- return path;
- }
- else
- {
- return null;
- }
- case PREFIX_GLOB:
- if (isWildcardMatch(path))
- {
- return path.substring(0,specLength - 2);
- }
- else
- {
- return null;
- }
- case SUFFIX_GLOB:
- if (path.regionMatches(path.length() - (specLength - 1),pathSpec,1,specLength - 1))
- {
- return path;
- }
- else
- {
- return null;
- }
- case DEFAULT:
- return path;
- default:
- return null;
- }
- }
-
- @Override
- public String getRelativePath(String base, String path)
- {
- String info = getPathInfo(path);
- if (info == null)
- {
- info = path;
- }
-
- if (info.startsWith("./"))
- {
- info = info.substring(2);
- }
- if (base.endsWith(URIUtil.SLASH))
- {
- if (info.startsWith(URIUtil.SLASH))
- {
- path = base + info.substring(1);
- }
- else
- {
- path = base + info;
- }
- }
- else if (info.startsWith(URIUtil.SLASH))
- {
- path = base + info;
- }
- else
- {
- path = base + URIUtil.SLASH + info;
- }
- return path;
- }
-
- private boolean isExactMatch(String path)
- {
- if (group == PathSpecGroup.EXACT)
- {
- if (pathSpec.equals(path))
- {
- return true;
- }
- return (path.charAt(path.length() - 1) == '/') && (path.equals(pathSpec + '/'));
- }
- return false;
- }
-
- private boolean isWildcardMatch(String path)
- {
- // For a spec of "/foo/*" match "/foo" , "/foo/..." but not "/foobar"
- int cpl = specLength - 2;
- if ((group == PathSpecGroup.PREFIX_GLOB) && (path.regionMatches(0,pathSpec,0,cpl)))
- {
- if ((path.length() == cpl) || ('/' == path.charAt(cpl)))
- {
- return true;
- }
- }
- return false;
- }
-
- @Override
- public boolean matches(String path)
- {
- switch (group)
- {
- case EXACT:
- return isExactMatch(path);
- case PREFIX_GLOB:
- return isWildcardMatch(path);
- case SUFFIX_GLOB:
- return path.regionMatches((path.length() - specLength) + 1,pathSpec,1,specLength - 1);
- case DEFAULT:
- return true;
- default:
- return false;
- }
+ super(servletPathSpec);
}
}

Back to the top