Top Description Fields Constructors Methods
org.apache.catalina.valves.rewrite

public Class RewriteValve

extends ValveBase
Class Inheritance
Imports
java.io.BufferedReader, .IOException, .InputStream, .InputStreamReader, .StringReader, java.nio.charset.Charset, .StandardCharsets, java.util.ArrayList, .List, .Map, .StringTokenizer, java.util.concurrent.ConcurrentHashMap, jakarta.servlet.ServletException, jakarta.servlet.http.Cookie, .HttpServletResponse, org.apache.catalina.Container, .Context, .Lifecycle, .LifecycleException, .Pipeline, org.apache.catalina.connector.Connector, .Request, .Response, org.apache.catalina.util.URLEncoder, org.apache.catalina.valves.ValveBase, org.apache.juli.logging.LogFactory, org.apache.tomcat.util.buf.CharChunk, .MessageBytes, .UDecoder, .UriUtil, org.apache.tomcat.util.file.ConfigFileLoader, .ConfigurationSource, org.apache.tomcat.util.http.RequestUtil

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

Field Summary

Modifier and TypeField and Description
protected boolean
context

Will be set to true if the valve is associated with a context.

protected boolean
enabled

enabled this component

protected ThreadLocal<Boolean>
invoked

If rewriting occurs, the whole request will be processed again.

protected Map<String, RewriteMap>
maps

Maps to be used by the rules.

protected ArrayList<String>
mapsConfiguration

Maps configuration.

protected String
resourcePath

Relative path to the configuration file.

protected RewriteRule[]
rules

The rewrite rules that the valve will use.

Inherited from org.apache.catalina.valves.ValveBase:
asyncSupportedcontainercontainerLognextsm

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public String
public boolean
protected void
initInternal()

Overrides org.apache.catalina.valves.ValveBase.initInternal.

Sub-classes wishing to perform additional initialization should override this method, ensuring that super.initInternal() is the first call in the overriding method.

public void
invoke(Request
The servlet request to be processed
request
,
Response
The servlet response to be created
response
)

Implements org.apache.catalina.Valve.invoke.

Perform request processing as required by this Valve.

protected void
public static Object

Returns:

The condition, rule or map resulting from parsing the line
parse
(String
A line from the rewrite configuration
line
)

This factory method will parse a line formed like: Example: RewriteCond %{REMOTE_HOST} ^host1.* [OR]

protected static void
parseCondFlag(String
The configuration line being parsed
line
,
RewriteCond
The current condition
condition
,
String
The flag
flag
)

Parser for RewriteCond flags.

protected static void
parseRuleFlag(String
The configuration line being parsed
line
,
RewriteRule
The current rule
rule
,
String
The flag
flag
)

Parser for RewriteRule flags.

public void
setConfiguration(String configuration)

public void
setEnabled(boolean enabled)

protected void
protected void
Inherited from org.apache.catalina.valves.ValveBase:
backgroundProcessgetContainergetDomainInternalgetNextgetObjectNameKeyPropertiesisAsyncSupportedsetAsyncSupportedsetContainersetNexttoString

Field Detail

contextback to summary
protected boolean context

Will be set to true if the valve is associated with a context.

enabledback to summary
protected boolean enabled

enabled this component

invokedback to summary
protected ThreadLocal<Boolean> invoked

If rewriting occurs, the whole request will be processed again.

mapsback to summary
protected Map<String, RewriteMap> maps

Maps to be used by the rules.

mapsConfigurationback to summary
protected ArrayList<String> mapsConfiguration

Maps configuration.

resourcePathback to summary
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/.

rulesback to summary
protected RewriteRule[] rules

The rewrite rules that the valve will use.

Constructor Detail

RewriteValveback to summary
public RewriteValve()

Method Detail

getConfigurationback to summary
public String getConfiguration()
getEnabledback to summary
public boolean getEnabled()
initInternalback to summary
protected void initInternal() throws LifecycleException

Overrides org.apache.catalina.valves.ValveBase.initInternal.

Doc from org.apache.catalina.util.LifecycleMBeanBase.initInternal.

Sub-classes wishing to perform additional initialization should override this method, ensuring that super.initInternal() is the first call in the overriding method.

Annotations
@Override
Exceptions
LifecycleException:

Doc from org.apache.catalina.util.LifecycleBase.initInternal.

If the initialisation fails

invokeback to summary
public void invoke(Request request, Response response) throws IOException, ServletException

Implements org.apache.catalina.Valve.invoke.

Doc from org.apache.catalina.Valve.invoke.

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:Request

The servlet request to be processed

response:Response

The servlet response to be created

Annotations
@Override
Exceptions
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
parseback to summary
protected void parse(BufferedReader reader) throws LifecycleException
parseback to summary
public static Object parse(String line)

This factory method will parse a line formed like: Example: RewriteCond %{REMOTE_HOST} ^host1.* [OR]

Parameters
line:String

A line from the rewrite configuration

Returns:Object

The condition, rule or map resulting from parsing the line

parseCondFlagback to summary
protected static void parseCondFlag(String line, RewriteCond condition, String flag)

Parser for RewriteCond flags.

Parameters
line:String

The configuration line being parsed

condition:RewriteCond

The current condition

flag:String

The flag

parseRuleFlagback to summary
protected static void parseRuleFlag(String line, RewriteRule rule, String flag)

Parser for RewriteRule flags.

Parameters
line:String

The configuration line being parsed

rule:RewriteRule

The current rule

flag:String

The flag

setConfigurationback to summary
public void setConfiguration(String configuration) throws Exception
setEnabledback to summary
public void setEnabled(boolean enabled)
startInternalback to summary
protected void startInternal() throws LifecycleException

Overrides org.apache.catalina.valves.ValveBase.startInternal.

Doc from org.apache.catalina.valves.ValveBase.startInternal.

Start this component and implement the requirements of org.apache.catalina.util.LifecycleBase#startInternal().

Annotations
@Override
Exceptions
LifecycleException:
if this component detects a fatal error that prevents this component from being used
stopInternalback to summary
protected void stopInternal() throws LifecycleException

Overrides org.apache.catalina.valves.ValveBase.stopInternal.

Doc from org.apache.catalina.valves.ValveBase.stopInternal.

Stop this component and implement the requirements of org.apache.catalina.util.LifecycleBase#stopInternal().

Annotations
@Override
Exceptions
LifecycleException:
if this component detects a fatal error that prevents this component from being used