java.lang.Object
nl.basjes.parse.useragent.utils.springframework.util.AntPathMatcher
All Implemented Interfaces:
PathMatcher

public class AntPathMatcher extends Object implements PathMatcher
{link PathMatcher} implementation for Ant-style path patterns.

Part of this mapping code has been kindly borrowed from Apache Ant.

The mapping matches URLs using the following rules:

  • ? matches one character
  • * matches zero or more characters
  • ** matches zero or more directories in a path
  • {spring:[a-z]+} matches the regexp [a-z]+ as a path variable named "spring"

Examples

  • com/t?st.jsp — matches com/test.jsp but also com/tast.jsp or com/txst.jsp
  • com/*.jsp — matches all .jsp files in the com directory
  • com/**/test.jsp — matches all test.jsp files underneath the com path
  • org/springframework/**/*.jsp — matches all .jsp files underneath the org/springframework path
  • org/**/servlet/bla.jsp — matches org/springframework/servlet/bla.jsp but also org/springframework/testing/servlet/bla.jsp and org/servlet/bla.jsp
  • com/{filename:\\w+}.jsp will match com/test.jsp and assign the value test to the filename variable

Note: a pattern and a path must both be absolute or must both be relative in order for the two to match. Therefore, it is recommended that users of this implementation to sanitize patterns in order to prefix them with "/" as it makes sense in the context in which they're used.

Since:
16.07.2003
Author:
Alef Arendsen, Juergen Hoeller, Rob Harrop, Arjen Poutsma, Rossen Stoyanchev, Sam Brannen, Vladislav Kisel
  • Field Details

    • DEFAULT_PATH_SEPARATOR

      public static final String DEFAULT_PATH_SEPARATOR
      Default path separator: "/".
      See Also:
  • Constructor Details

    • AntPathMatcher

      public AntPathMatcher()
      Create a new instance with the {link #DEFAULT_PATH_SEPARATOR}.
  • Method Details

    • isPattern

      public boolean isPattern(@Nullable String path)
      Description copied from interface: PathMatcher
      Does the given path represent a pattern that can be matched by an implementation of this interface?

      If the return value is false, then the {link #match} method does not have to be used because direct equality comparisons on the static path Strings will lead to the same result.

      Specified by:
      isPattern in interface PathMatcher
      Parameters:
      path - the path to check
      Returns:
      true if the given path represents a pattern
    • match

      public boolean match(String pattern, String path)
      Description copied from interface: PathMatcher
      Match the given path against the given pattern, according to this PathMatcher's matching strategy.
      Specified by:
      match in interface PathMatcher
      Parameters:
      pattern - the pattern to match against
      path - the path to test
      Returns:
      true if the supplied path matched, false if it didn't
    • matchStart

      public boolean matchStart(String pattern, String path)
      Description copied from interface: PathMatcher
      Match the given path against the corresponding part of the given pattern, according to this PathMatcher's matching strategy.

      Determines whether the pattern at least matches as far as the given base path goes, assuming that a full path may then match as well.

      Specified by:
      matchStart in interface PathMatcher
      Parameters:
      pattern - the pattern to match against
      path - the path to test
      Returns:
      true if the supplied path matched, false if it didn't
    • doMatch

      protected boolean doMatch(String pattern, @Nullable String path, boolean fullMatch, @Nullable Map<String,String> uriTemplateVariables)
      Actually match the given path against the given pattern.
      Parameters:
      pattern - the pattern to match against
      path - the path to test
      fullMatch - whether a full pattern match is required (else a pattern match as far as the given base path goes is sufficient)
      Returns:
      true if the supplied path matched, false if it didn't
    • tokenizePattern

      protected String[] tokenizePattern(String pattern)
      Tokenize the given path pattern into parts, based on this matcher's settings.

      Performs caching based on {link #setCachePatterns}, delegating to {link #tokenizePath(String)} for the actual tokenization algorithm.

      Parameters:
      pattern - the pattern to tokenize
      Returns:
      the tokenized pattern parts
    • tokenizePath

      protected String[] tokenizePath(String path)
      Tokenize the given path into parts, based on this matcher's settings.
      Parameters:
      path - the path to tokenize
      Returns:
      the tokenized path parts
    • getStringMatcher

      protected AntPathMatcher.AntPathStringMatcher getStringMatcher(String pattern)
      Build or retrieve an {link AntPathStringMatcher} for the given pattern.

      The default implementation checks this AntPathMatcher's internal cache (see {link #setCachePatterns}), creating a new AntPathStringMatcher instance if no cached copy is found.

      When encountering too many patterns to cache at runtime (the threshold is 65536), it turns the default cache off, assuming that arbitrary permutations of patterns are coming in, with little chance for encountering a recurring pattern.

      This method may be overridden to implement a custom cache strategy.

      Parameters:
      pattern - the pattern to match against (never null)
      Returns:
      a corresponding AntPathStringMatcher (never null) see #setCachePatterns