Class AntPathMatcher

java.lang.Object
io.micronaut.core.util.AntPathMatcher
All Implemented Interfaces:
PathMatcher

public class AntPathMatcher extends Object implements PathMatcher

PathMatcher implementation for Ant-style path patterns. Examples are provided below.

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

Some 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/apache/shiro/**/*.jsp - matches all .jsp files underneath the org/apache/shiro path
  • org/**/servlet/bla.jsp - matches org/apache/shiro/servlet/bla.jsp but also org/apache/shiro/testing/servlet/bla.jsp and org/servlet/bla.jsp

N.B.: This class was forked from Apache Shiro with modifications.

As per the Apache 2.0 license, the original copyright notice and all author and copyright information have remained intact.

Since:
1.0
  • Field Details

    • DEFAULT_PATH_SEPARATOR

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

    • AntPathMatcher

      public AntPathMatcher()
  • Method Details

    • setPathSeparator

      public void setPathSeparator(String pathSeparator)
      Set the path separator to use for pattern parsing. Default is "/", as in Ant.
      Parameters:
      pathSeparator - The path separator for the pattern parsing
    • isPattern

      public boolean isPattern(String path)
      Parameters:
      path - The path
      Returns:
      Whether is pattern
    • matches

      public boolean matches(String pattern, String source)
      Description copied from interface: PathMatcher
      Returns true if the given source matches the specified pattern, false otherwise.
      Specified by:
      matches in interface PathMatcher
      Parameters:
      pattern - the pattern to match against
      source - the source to match
      Returns:
      true if the given source matches the specified pattern, false otherwise.
    • doMatch

      protected boolean doMatch(String pattern, String path, boolean fullMatch)
      Actually match the given path against the given pattern.
      Parameters:
      pattern - the pattern to match against
      path - the path String 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
    • extractPathWithinPattern

      public String extractPathWithinPattern(String pattern, String path)
      Given a pattern and a full path, determine the pattern-mapped part.

      For example:

      • '/docs/cvs/commit.html' and '/docs/cvs/commit.html -> ''
      • '/docs/*' and '/docs/cvs/commit -> 'cvs/commit'
      • '/docs/cvs/*.html' and '/docs/cvs/commit.html -> 'commit.html'
      • '/docs/**' and '/docs/cvs/commit -> 'cvs/commit'
      • '/docs/**\/*.html' and '/docs/cvs/commit.html -> 'cvs/commit.html'
      • '/*.html' and '/docs/cvs/commit.html -> 'docs/cvs/commit.html'
      • '*.html' and '/docs/cvs/commit.html -> '/docs/cvs/commit.html'
      • '*' and '/docs/cvs/commit.html -> '/docs/cvs/commit.html'

      Assumes that matches(String, String) returns true for 'pattern' and 'path', but does not enforce this.

      Parameters:
      pattern - The pattern
      path - The path
      Returns:
      The pattern-mapped part