Interface FilterChainManager

All Known Implementing Classes:
DefaultFilterChainManager

public interface FilterChainManager
A FilterChainManager manages the creation and modification of Filter chains from an available pool of Filter instances.
Since:
1.0
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    addFilter(String name, javax.servlet.Filter filter)
    Adds a filter to the 'pool' of available filters that can be used when creating filter chains.
    void
    addFilter(String name, javax.servlet.Filter filter, boolean init)
    Adds a filter to the 'pool' of available filters that can be used when creating filter chains.
    void
    addToChain(String chainName, String filterName)
    Adds (appends) a filter to the filter chain identified by the given chainName.
    void
    addToChain(String chainName, String filterName, String chainSpecificFilterConfig)
    Adds (appends) a filter to the filter chain identified by the given chainName.
    void
    createChain(String chainName, String chainDefinition)
    Creates a filter chain for the given chainName with the specified chainDefinition String.
    void
    Creates a chain that should match any non-matched request paths, typically /** assuming an AntPathMatcher I used.
    getChain(String chainName)
    Returns the filter chain identified by the specified chainName or null if there is no chain with that name.
    Returns the names of all configured chains or an empty Set if no chains have been configured.
    Map<String,javax.servlet.Filter>
    Returns the pool of available Filters managed by this manager, keyed by name.
    boolean
    Returns true if one or more configured chains are available, false if none are configured.
    javax.servlet.FilterChain
    proxy(javax.servlet.FilterChain original, String chainName)
    Proxies the specified original FilterChain with the named chain.
    void
    setGlobalFilters(List<String> globalFilterNames)
    Configures the set of named filters that will match all paths.
  • Method Details

    • getFilters

      Map<String,javax.servlet.Filter> getFilters()
      Returns the pool of available Filters managed by this manager, keyed by name.
      Returns:
      the pool of available Filters managed by this manager, keyed by name.
    • getChain

      Returns the filter chain identified by the specified chainName or null if there is no chain with that name.
      Parameters:
      chainName - the name identifying the filter chain.
      Returns:
      the filter chain identified by the specified chainName or null if there is no chain with that name.
    • hasChains

      boolean hasChains()
      Returns true if one or more configured chains are available, false if none are configured.
      Returns:
      true if one or more configured chains are available, false if none are configured.
    • getChainNames

      Returns the names of all configured chains or an empty Set if no chains have been configured.
      Returns:
      the names of all configured chains or an empty Set if no chains have been configured.
    • proxy

      javax.servlet.FilterChain proxy(javax.servlet.FilterChain original, String chainName)
      Proxies the specified original FilterChain with the named chain. The returned FilterChain instance will first execute the configured named chain and then lastly invoke the given original chain.
      Parameters:
      original - the original FilterChain to proxy
      chainName - the name of the internal configured filter chain that should 'sit in front' of the specified original chain.
      Returns:
      a FilterChain instance that will execute the named chain and then finally the specified original FilterChain instance.
      Throws:
      IllegalArgumentException - if there is no configured chain with the given chainName.
    • addFilter

      void addFilter(String name, javax.servlet.Filter filter)
      Adds a filter to the 'pool' of available filters that can be used when creating filter chains.

      Calling this method is effectively the same as calling addFilter(name, filter, false);

      Parameters:
      name - the name to assign to the filter, used to reference the filter in chain definitions
      filter - the filter to initialize and then add to the pool of available filters that can be used
    • addFilter

      void addFilter(String name, javax.servlet.Filter filter, boolean init)
      Adds a filter to the 'pool' of available filters that can be used when creating filter chains.
      Parameters:
      name - the name to assign to the filter, used to reference the filter in chain definitions
      filter - the filter to assign to the filter pool
      init - whether or not the Filter should be initialized first before being added to the pool.
    • createChain

      void createChain(String chainName, String chainDefinition)
      Creates a filter chain for the given chainName with the specified chainDefinition String.

      Conventional Use

      Because the FilterChainManager interface does not impose any restrictions on filter chain names, (it expects only Strings), a convenient convention is to make the chain name an actual URL path expression (such as an Ant path expression). For example:

      createChain(path_expression, path_specific_filter_chain_definition); This convention can be used by a FilterChainResolver to inspect request URL paths against the chain name (path) and, if a match is found, return the corresponding chain for runtime filtering.

      Chain Definition Format

      The chainDefinition method argument is expected to conform to the following format:
       filter1[optional_config1], filter2[optional_config2], ..., filterN[optional_configN]
      where
      1. filterN is the name of a filter previously registered with the manager, and
      2. [optional_configN] is an optional bracketed string that has meaning for that particular filter for this particular chain
      If the filter does not need specific config for that chain name/URL path, you may discard the brackets - that is, filterN[] just becomes filterN.

      And because this method does create a chain, remember that order matters! The comma-delimited filter tokens in the chainDefinition specify the chain's execution order.

      Examples

      /account/** = authcBasic
      This example says "Create a filter named '/account/**' consisting of only the 'authcBasic' filter". Also because the authcBasic filter does not need any path-specific config, it doesn't have any config brackets [].

      /remoting/** = authcBasic, roles[b2bClient], perms["remote:invoke:wan,lan"]
      This example by contrast uses the 'roles' and 'perms' filters which do use bracket notation. This definition says:

      Construct a filter chain named '/remoting/**' which

      1. ensures the user is first authenticated (authcBasic) then
      2. ensures that user has the b2bClient role, and then finally
      3. ensures that they have the remote:invoke:lan,wan permission.

      Note: because elements within brackets [ ] can be comma-delimited themselves, you must quote the internal bracket definition if commas are needed (the above example has 'lan,wan'). If we didn't do that, the parser would interpret the chain definition as four tokens:

      1. authcBasic
      2. roles[b2bclient]
      3. perms[remote:invoke:lan
      4. wan]
      which is obviously incorrect. So remember to use quotes if your internal bracket definitions need to use commas.
      Parameters:
      chainName - the name to associate with the chain, conventionally a URL path pattern.
      chainDefinition - the string-formatted chain definition used to construct an actual NamedFilterList chain instance.
      See Also:
    • createDefaultChain

      void createDefaultChain(String chainName)
      Creates a chain that should match any non-matched request paths, typically /** assuming an AntPathMatcher I used.
      Parameters:
      chainName - The name of the chain to create, likely /**.
      Since:
      1.6
      See Also:
      • AntPathMatcher
    • addToChain

      void addToChain(String chainName, String filterName)
      Adds (appends) a filter to the filter chain identified by the given chainName. If there is no chain with the given name, a new one is created and the filter will be the first in the chain.
      Parameters:
      chainName - the name of the chain where the filter will be appended.
      filterName - the name of the registered filter to add to the chain.
      Throws:
      IllegalArgumentException - if there is not a registered filter under the given filterName
    • addToChain

      void addToChain(String chainName, String filterName, String chainSpecificFilterConfig) throws org.apache.shiro.config.ConfigurationException
      Adds (appends) a filter to the filter chain identified by the given chainName. If there is no chain with the given name, a new one is created and the filter will be the first in the chain.

      Note that the final argument expects the associated filter to be an instance of a PathConfigProcessor to accept per-chain configuration. If it is not, a IllegalArgumentException will be thrown.

      Parameters:
      chainName - the name of the chain where the filter will be appended.
      filterName - the name of the registered filter to add to the chain.
      chainSpecificFilterConfig - the filter-specific configuration that should be applied for only the specified filter chain.
      Throws:
      IllegalArgumentException - if there is not a registered filter under the given filterName
      org.apache.shiro.config.ConfigurationException - if the filter is not capable of accepting chainSpecificFilterConfig (usually such filters implement the PathConfigProcessor interface).
    • setGlobalFilters

      void setGlobalFilters(List<String> globalFilterNames) throws org.apache.shiro.config.ConfigurationException
      Configures the set of named filters that will match all paths. These filters will match BEFORE explicitly configured filter chains i.e. by calling createChain(String, String), addToChain(String, String), etc.
      Filters configured in this list will apply to ALL requests.
      Parameters:
      globalFilterNames - the list of filter names to match ALL paths.
      Throws:
      org.apache.shiro.config.ConfigurationException - if one of the filter names is invalid and cannot be loaded from the set of configured filters getFilters()}.
      Since:
      1.6