Class RewriteValve

All Implemented Interfaces:
MBeanRegistration, Contained, JmxEnabled, Lifecycle, Valve

public class RewriteValve extends ValveBase
Note: Extra caution should be used when adding a Rewrite Rule. When specifying a regex to match for in a Rewrite Rule, certain regex could allow an attacker to DoS your server, as Java's regex parsing is vulnerable to "catastrophic backtracking" (also known as "Regular expression Denial of Service", or ReDoS). There are some open source tools to help detect vulnerable regex, though in general it is a hard problem. A good defence is to use a regex debugger on your desired regex, and read more on the subject of catastrophic backtracking.
See Also:
  • Field Details

    • rules

      protected RewriteRule[] rules
      The rewrite rules that the valve will use.
    • invoked

      protected ThreadLocal<Boolean> invoked
      If rewriting occurs, the whole request will be processed again.
    • resourcePath

      protected String resourcePath
      Relative path to the configuration file. Note: If the valve's container is a context, this will be relative to /WEB-INF/.
    • context

      protected boolean context
      Will be set to true if the valve is associated with a context.
    • enabled

      protected boolean enabled
      enabled this component
    • maps

      protected Map<String,RewriteMap> maps
      Maps to be used by the rules.
    • mapsConfiguration

      protected ArrayList<String> mapsConfiguration
      Maps configuration.
  • Constructor Details

    • RewriteValve

      public RewriteValve()
  • Method Details

    • getEnabled

      public boolean getEnabled()
    • setEnabled

      public void setEnabled(boolean enabled)
    • initInternal

      protected void initInternal() throws LifecycleException
      Description copied from class: LifecycleBase
      Sub-classes implement this method to perform any instance initialisation required.
      Overrides:
      initInternal in class ValveBase
      Throws:
      LifecycleException - If the initialisation fails
    • startInternal

      protected void startInternal() throws LifecycleException
      Description copied from class: ValveBase
      Start this component and implement the requirements of LifecycleBase.startInternal().
      Overrides:
      startInternal in class ValveBase
      Throws:
      LifecycleException - if this component detects a fatal error that prevents this component from being used
    • setConfiguration

      public void setConfiguration(String configuration) throws Exception
      Throws:
      Exception
    • getConfiguration

      public String getConfiguration()
    • parse

      protected void parse(BufferedReader reader) throws LifecycleException
      Throws:
      LifecycleException
    • stopInternal

      protected void stopInternal() throws LifecycleException
      Description copied from class: ValveBase
      Stop this component and implement the requirements of LifecycleBase.stopInternal().
      Overrides:
      stopInternal in class ValveBase
      Throws:
      LifecycleException - if this component detects a fatal error that prevents this component from being used
    • invoke

      public void invoke(Request request, Response response) throws IOException, ServletException
      Description copied from interface: Valve

      Perform request processing as required by this Valve.

      An individual Valve MAY perform the following actions, in the specified order:

      • Examine and/or modify the properties of the specified Request and Response.
      • Examine the properties of the specified Request, completely generate the corresponding Response, and return control to the caller.
      • Examine the properties of the specified Request and Response, wrap either or both of these objects to supplement their functionality, and pass them on.
      • If the corresponding Response was not generated (and control was not returned, call the next Valve in the pipeline (if there is one) by executing getNext().invoke().
      • Examine, but not modify, the properties of the resulting Response (which was created by a subsequently invoked Valve or Container).

      A Valve MUST NOT do any of the following things:

      • Change request properties that have already been used to direct the flow of processing control for this request (for instance, trying to change the virtual host to which a Request should be sent from a pipeline attached to a Host or Context in the standard implementation).
      • Create a completed Response AND pass this Request and Response on to the next Valve in the pipeline.
      • Consume bytes from the input stream associated with the Request, unless it is completely generating the response, or wrapping the request before passing it on.
      • Modify the HTTP headers included with the Response after the getNext().invoke() method has returned.
      • Perform any actions on the output stream associated with the specified Response after the getNext().invoke() method has returned.
      Parameters:
      request - The servlet request to be processed
      response - The servlet response to be created
      Throws:
      IOException - if an input/output error occurs, or is thrown by a subsequently invoked Valve, Filter, or Servlet
      ServletException - if a servlet error occurs, or is thrown by a subsequently invoked Valve, Filter, or Servlet
    • parse

      public static Object parse(String line)
      This factory method will parse a line formed like:

      Example: RewriteCond %{REMOTE_HOST} ^host1.* [OR]

      Parameters:
      line - A line from the rewrite configuration
      Returns:
      The condition, rule or map resulting from parsing the line
    • parseCondFlag

      protected static void parseCondFlag(String line, RewriteCond condition, String flag)
      Parser for RewriteCond flags.
      Parameters:
      line - The configuration line being parsed
      condition - The current condition
      flag - The flag
    • parseRuleFlag

      protected static void parseRuleFlag(String line, RewriteRule rule, String flag)
      Parser for RewriteRule flags.
      Parameters:
      line - The configuration line being parsed
      rule - The current rule
      flag - The flag