Class RewriteValve
- java.lang.Object
- 
- org.apache.catalina.util.LifecycleBase
- 
- org.apache.catalina.util.LifecycleMBeanBase
- 
- org.apache.catalina.valves.ValveBase
- 
- org.apache.catalina.valves.rewrite.RewriteValve
 
 
 
 
- 
- All Implemented Interfaces:
- javax.management.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:
- OWASP ReDoS
 
- 
- 
Nested Class Summary- 
Nested classes/interfaces inherited from interface org.apache.catalina.LifecycleLifecycle.SingleUse
 
- 
 - 
Field SummaryFields Modifier and Type Field Description protected booleancontextWill be set to true if the valve is associated with a context.protected booleanenabledenabled this componentprotected java.lang.ThreadLocal<java.lang.Boolean>invokedIf rewriting occurs, the whole request will be processed again.protected java.util.Map<java.lang.String,RewriteMap>mapsMaps to be used by the rules.protected java.util.ArrayList<java.lang.String>mapsConfigurationMaps configuration.protected java.lang.StringresourcePathRelative path to the configuration file.protected RewriteRule[]rulesThe rewrite rules that the valve will use.- 
Fields inherited from class org.apache.catalina.valves.ValveBaseasyncSupported, container, containerLog, next, sm
 - 
Fields inherited from class org.apache.catalina.util.LifecycleMBeanBasemserver
 - 
Fields inherited from interface org.apache.catalina.LifecycleAFTER_DESTROY_EVENT, AFTER_INIT_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_DESTROY_EVENT, BEFORE_INIT_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, CONFIGURE_START_EVENT, CONFIGURE_STOP_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT
 
- 
 - 
Constructor SummaryConstructors Constructor Description RewriteValve()
 - 
Method SummaryAll Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected java.io.FilegetConfigBase()java.lang.StringgetConfiguration()booleangetEnabled()protected java.lang.StringgetHostConfigPath(java.lang.String resourceName)Find the configuration path where the rewrite configuration file will be stored.protected voidinitInternal()Sub-classes wishing to perform additional initialization should override this method, ensuring that super.initInternal() is the first call in the overriding method.voidinvoke(Request request, Response response)Perform request processing as required by this Valve.protected voidparse(java.io.BufferedReader reader)static java.lang.Objectparse(java.lang.String line)This factory method will parse a line formed like: Example: RewriteCond %{REMOTE_HOST} ^host1.* [OR]protected static voidparseCondFlag(java.lang.String line, RewriteCond condition, java.lang.String flag)Parser for RewriteCond flags.protected static voidparseRuleFlag(java.lang.String line, RewriteRule rule, java.lang.String flag)Parser for RewriteRule flags.voidsetConfiguration(java.lang.String configuration)voidsetEnabled(boolean enabled)protected voidstartInternal()Start this component and implement the requirements ofLifecycleBase.startInternal().protected voidstopInternal()Stop this component and implement the requirements ofLifecycleBase.stopInternal().- 
Methods inherited from class org.apache.catalina.valves.ValveBasebackgroundProcess, getContainer, getDomainInternal, getNext, getObjectNameKeyProperties, isAsyncSupported, setAsyncSupported, setContainer, setNext, toString
 - 
Methods inherited from class org.apache.catalina.util.LifecycleMBeanBasedestroyInternal, getDomain, getObjectName, postDeregister, postRegister, preDeregister, preRegister, register, setDomain, unregister
 - 
Methods inherited from class org.apache.catalina.util.LifecycleBaseaddLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop
 
- 
 
- 
- 
- 
Field Detail- 
rulesprotected RewriteRule[] rules The rewrite rules that the valve will use.
 - 
invokedprotected java.lang.ThreadLocal<java.lang.Boolean> invoked If rewriting occurs, the whole request will be processed again.
 - 
resourcePathprotected java.lang.String resourcePath Relative path to the configuration file. Note: If the valve's container is a context, this will be relative to /WEB-INF/.
 - 
contextprotected boolean context Will be set to true if the valve is associated with a context.
 - 
enabledprotected boolean enabled enabled this component
 - 
mapsprotected java.util.Map<java.lang.String,RewriteMap> maps Maps to be used by the rules.
 - 
mapsConfigurationprotected java.util.ArrayList<java.lang.String> mapsConfiguration Maps configuration.
 
- 
 - 
Method Detail- 
getEnabledpublic boolean getEnabled() 
 - 
setEnabledpublic void setEnabled(boolean enabled) 
 - 
initInternalprotected void initInternal() throws LifecycleExceptionDescription copied from class:LifecycleMBeanBaseSub-classes wishing to perform additional initialization should override this method, ensuring that super.initInternal() is the first call in the overriding method.- Overrides:
- initInternalin class- ValveBase
- Throws:
- LifecycleException- If the initialisation fails
 
 - 
startInternalprotected void startInternal() throws LifecycleExceptionDescription copied from class:ValveBaseStart this component and implement the requirements ofLifecycleBase.startInternal().- Overrides:
- startInternalin class- ValveBase
- Throws:
- LifecycleException- if this component detects a fatal error that prevents this component from being used
 
 - 
setConfigurationpublic void setConfiguration(java.lang.String configuration) throws java.lang.Exception- Throws:
- java.lang.Exception
 
 - 
getConfigurationpublic java.lang.String getConfiguration() 
 - 
parseprotected void parse(java.io.BufferedReader reader) throws LifecycleException- Throws:
- LifecycleException
 
 - 
stopInternalprotected void stopInternal() throws LifecycleExceptionDescription copied from class:ValveBaseStop this component and implement the requirements ofLifecycleBase.stopInternal().- Overrides:
- stopInternalin class- ValveBase
- Throws:
- LifecycleException- if this component detects a fatal error that prevents this component from being used
 
 - 
invokepublic void invoke(Request request, Response response) throws java.io.IOException, ServletException Description copied from interface:ValvePerform 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:
- java.io.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
 
 - 
getConfigBaseprotected java.io.File getConfigBase() - Returns:
- config base.
 
 - 
getHostConfigPathprotected java.lang.String getHostConfigPath(java.lang.String resourceName) Find the configuration path where the rewrite configuration file will be stored.- Parameters:
- resourceName- The rewrite configuration file name
- Returns:
- the full rewrite configuration path
 
 - 
parsepublic static java.lang.Object parse(java.lang.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
 
 - 
parseCondFlagprotected static void parseCondFlag(java.lang.String line, RewriteCond condition, java.lang.String flag)Parser for RewriteCond flags.- Parameters:
- line- The configuration line being parsed
- condition- The current condition
- flag- The flag
 
 - 
parseRuleFlagprotected static void parseRuleFlag(java.lang.String line, RewriteRule rule, java.lang.String flag)Parser for RewriteRule flags.- Parameters:
- line- The configuration line being parsed
- rule- The current rule
- flag- The flag
 
 
- 
 
-