<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="filter.html">

  &project;

  <properties>
    <title>Container Provided Filters</title>
  </properties>

<body>

<section name="Table of Contents">
<toc/>
</section>

<section name="Introduction">

  <p>Tomcat provides a number of <strong>Filters</strong> which may be
  configured for use with all web applications using
  <code>$CATALINA_BASE/conf/web.xml</code> or may be configured for individual
  web applications by configuring them in the application's
  <code>WEB-INF/web.xml</code>. Each filter is described below.</p>

    <p><em>This description uses the variable name $CATALINA_BASE to refer the
    base directory against which most relative paths are resolved. If you have
    not configured Tomcat for multiple instances by setting a CATALINA_BASE
    directory, then $CATALINA_BASE will be set to the value of $CATALINA_HOME,
    the directory into which you have installed Tomcat.</em></p>

</section>


<section name="Add Default Character Set Filter">

  <subsection name="Introduction">

    <p>The HTTP specification is clear that if no character set is specified for
    media sub-types of the "text" media type, the ISO-8859-1 character set must
    be used. However, browsers may attempt to auto-detect the character set.
    This may be exploited by an attacker to perform an XSS attack. Internet
    Explorer and other browsers have an option to
    enable this behavior.</p>

    <p>This filter prevents the attack by explicitly setting a character set.
    Unless the provided character set is explicitly overridden by the user the
    browser will adhere to the explicitly set character set, thus preventing the
    XSS attack.</p>

  </subsection>

  <subsection name="Filter Class Name">

    <p>The filter class name for the Add Default Character Set Filter is
    <strong><code>org.apache.catalina.filters.AddDefaultCharsetFilter</code>
    </strong>.</p>

  </subsection>

  <subsection name="Initialisation parameters">

    <p>The Add Default Character Set Filter supports the following initialization
    parameters:</p>

    <attributes>

      <attribute name="encoding" required="false">
        <p>Name of the character set which should be set, if no other character set
        was set explicitly by a Servlet. This parameter has two special values
        <code>default</code> and <code>system</code>. A value of <code>system</code>
        uses the JVM wide default character set, which is usually set by locale.
        A value of <code>default</code> will use <strong>ISO-8859-1</strong>.</p>
      </attribute>

    </attributes>

  </subsection>

</section>

<section name="CORS Filter">
  <subsection name="Introduction">
    <p>This filter is an implementation of W3C's CORS (Cross-Origin Resource
    Sharing) <a href="http://www.w3.org/TR/cors/">specification</a>, which is a
    mechanism that enables cross-origin requests.</p>
    <p>The filter works by adding required <code>Access-Control-*</code> headers
    to HttpServletResponse object. The filter also protects against HTTP
    response splitting. If request is invalid, or is not permitted, then request
    is rejected with HTTP status code 403 (Forbidden). A
    <a href="../images/cors-flowchart.png">flowchart</a> that
    demonstrates request processing by this filter is available.</p>
    <p>The minimal configuration required to use this filter is:</p>
    <source><![CDATA[<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>]]></source>
  </subsection>
  <subsection name="Filter Class Name">
    <p>The filter class name for the CORS Filter is
    <strong><code>org.apache.catalina.filters.CorsFilter</code></strong>.</p>
  </subsection>
  <subsection name="Initialisation parameters">
    <p>The CORS Filter supports following initialisation parameters:</p>
    <attributes>
      <attribute name="cors.allowed.origins" required="false">
        <p>A list of <a href="http://tools.ietf.org/html/rfc6454">origins</a>
        that are allowed to access the resource. A <code>*</code> can be
        specified to enable access to resource from any origin. Otherwise, a
        whitelist of comma separated origins can be provided. Eg: <code>
        http://www.w3.org, https://www.apache.org</code>.
        <strong>Defaults:</strong> <code>*</code> (Any origin is allowed to
        access the resource).</p>
      </attribute>
      <attribute name="cors.allowed.methods" required="false">
        <p>A comma separated list of HTTP methods that can be used to access the
        resource, using cross-origin requests. These are the methods which will
        also be included as part of <code>Access-Control-Allow-Methods</code>
        header in pre-flight response. Eg: <code>GET, POST</code>.
        <strong>Defaults:</strong> <code>GET, POST, HEAD, OPTIONS</code></p>
      </attribute>
      <attribute name="cors.allowed.headers" required="false">
        <p>A comma separated list of request headers that can be used when
        making an actual request. These headers will also be returned as part
        of <code>Access-Control-Allow-Headers</code> header in a pre-flight
        response. Eg: <code>Origin,Accept</code>. <strong>Defaults:</strong>
        <code>Origin, Accept, X-Requested-With, Content-Type,
        Access-Control-Request-Method, Access-Control-Request-Headers</code></p>
      </attribute>
      <attribute name="cors.exposed.headers" required="false">
        <p>A comma separated list of headers other than simple response headers
        that browsers are allowed to access. These are the headers which will
        also be included as part of <code>Access-Control-Expose-Headers</code>
        header in the pre-flight response. Eg:
        <code>X-CUSTOM-HEADER-PING,X-CUSTOM-HEADER-PONG</code>.
        <strong>Default:</strong> None. Non-simple headers are not exposed by
        default.</p>
      </attribute>
      <attribute name="cors.preflight.maxage" required="false">
        <p>The amount of seconds, browser is allowed to cache the result of the
        pre-flight request. This will be included as part of
        <code>Access-Control-Max-Age</code> header in the pre-flight response.
        A negative value will prevent CORS Filter from adding this response
        header to pre-flight response. <strong>Defaults:</strong>
        <code>1800</code></p>
      </attribute>
      <attribute name="cors.support.credentials" required="false">
        <p>A flag that indicates whether the resource supports user credentials.
        This flag is exposed as part of
        <code>Access-Control-Allow-Credentials</code> header in a pre-flight
        response. It helps browser determine whether or not an actual request
        can be made using credentials. <strong>Defaults:</strong>
        <code>true</code></p>
      </attribute>
      <attribute name="cors.request.decorate" required="false">
        <p>A flag to control if CORS specific attributes should be added to
        HttpServletRequest object or not. <strong>Defaults:</strong>
        <code>true</code></p>
      </attribute>
    </attributes>
    <p>Here's an example of a more advanced configuration, that overrides
    defaults:</p>
    <source><![CDATA[<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>*</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.methods</param-name>
    <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.headers</param-name>
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
  </init-param>
  <init-param>
    <param-name>cors.exposed.headers</param-name>
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
  </init-param>
  <init-param>
    <param-name>cors.support.credentials</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param>
    <param-name>cors.preflight.maxage</param-name>
    <param-value>10</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>]]></source>
  </subsection>
  <subsection name="CORS Filter and HttpServletRequest attributes">
    <p>CORS Filter adds information about the request, in HttpServletRequest
    object, for consumption downstream. Following attributes are set, if
    <code>cors.request.decorate</code> initialisation parameter is
    <code>true</code>:</p>
    <ul>
      <li><strong>cors.isCorsRequest:</strong> Flag to determine if request is
          a CORS request.</li>
      <li><strong>cors.request.origin:</strong> The Origin URL, i.e. the URL of
          the page from where the request originated.</li>
      <li><strong>cors.request.type:</strong> Type of CORS request. Possible
          values:
        <ul>
          <li><code>SIMPLE</code>: A request which is not preceded by a
              pre-flight request.</li>
          <li><code>ACTUAL</code>: A request which is preceded by a pre-flight
              request.</li>
          <li><code>PRE_FLIGHT</code>: A pre-flight request.</li>
          <li><code>NOT_CORS</code>: A normal same-origin request.</li>
          <li><code>INVALID_CORS</code>: A cross-origin request, which is
              invalid.</li>
        </ul>
      </li>
      <li><strong>cors.request.headers:</strong> Request headers sent as
          <code>Access-Control-Request-Headers</code> header, for a pre-flight
          request.
      </li>
    </ul>
  </subsection>
</section>

<section name="CSRF Prevention Filter">

  <subsection name="Introduction">

    <p>This filter provides basic CSRF protection for a web application. The
    filter assumes that it is mapped to <code>/*</code> and that all URLs
    returned to the client are encoded via a call to
    <code>HttpServletResponse#encodeRedirectURL(String)</code> or
    <code>HttpServletResponse#encodeURL(String)</code>.</p>

    <p>This filter prevents CSRF by generating a nonce and storing it in the
    session. URLs are also encoded with the same nonce. When the next request is
    received the nonce in the request is compared to the nonce in the session
    and only if they are the same is the request allowed to continue.</p>

  </subsection>

  <subsection name="Filter Class Name">

    <p>The filter class name for the CSRF Prevention Filter is
    <strong><code>org.apache.catalina.filters.CsrfPreventionFilter</code>
    </strong>.</p>

  </subsection>

  <subsection name="Initialisation parameters">

    <p>The CSRF Prevention Filter supports the following initialisation
    parameters:</p>

    <attributes>

      <attribute name="denyStatus" required="false">
        <p>HTTP response status code that is used when rejecting denied
        request. The default value is <code>403</code>.</p>
      </attribute>

      <attribute name="entryPoints" required="false">
        <p>A comma separated list of URLs that will not be tested for the
        presence of a valid nonce. They are used to provide a way to navigate
        back to a protected application after having navigated away from it.
        Entry points will be limited to HTTP GET requests and should not trigger
        any security sensitive actions.</p>
      </attribute>

      <attribute name="nonceCacheSize" required="false">
        <p>The number of previously issued nonces that will be cached on a LRU
        basis to support parallel requests, limited use of the refresh and back
        in the browser and similar behaviors that may result in the submission
        of a previous nonce rather than the current one. If not set, the default
        value of 5 will be used.</p>
      </attribute>

      <attribute name="randomClass" required="false">
        <p>The name of the class to use to generate nonces. The class must be an
        instance of <code>java.util.Random</code>. If not set, the default value
        of <code>java.security.SecureRandom</code> will be used.</p>
      </attribute>

    </attributes>

  </subsection>

</section>

<section name="Expires Filter">

  <subsection name="Introduction">

    <p>
    ExpiresFilter is a Java Servlet API port of <a
    href="http://httpd.apache.org/docs/2.2/mod/mod_expires.html">Apache
    mod_expires</a>.
    This filter controls the setting of the <code>Expires</code> HTTP header and the
    <code>max-age</code> directive of the <code>Cache-Control</code> HTTP header in
    server responses. The expiration date can set to be relative to either the
    time the source file was last modified, or to the time of the client access.
    </p>

    <p>
    These HTTP headers are an instruction to the client about the document&#x27;s
    validity and persistence. If cached, the document may be fetched from the
    cache rather than from the source until this time has passed. After that, the
    cache copy is considered &quot;expired&quot; and invalid, and a new copy must
    be obtained from the source.
    </p>
    <p>
    To modify <code>Cache-Control</code> directives other than <code>max-age</code> (see
    <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9" >RFC
    2616 section 14.9</a>), you can use other servlet filters or <a
    href="http://httpd.apache.org/docs/2.2/mod/mod_headers.html" >Apache Httpd
    mod_headers</a> module.
    </p>

  </subsection>

  <subsection name="Basic configuration sample">
    <p>
    Basic configuration to add '<code>Expires</code>' and '<code>Cache-Control: max-age=</code>'
    headers to images, css and javascript.
    </p>

    <source><![CDATA[<filter>
 <filter-name>ExpiresFilter</filter-name>
 <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
 <init-param>
    <param-name>ExpiresByType image</param-name>
    <param-value>access plus 10 minutes</param-value>
 </init-param>
 <init-param>
    <param-name>ExpiresByType text/css</param-name>
    <param-value>access plus 10 minutes</param-value>
 </init-param>
 <init-param>
    <param-name>ExpiresByType application/javascript</param-name>
    <param-value>access plus 10 minutes</param-value>
 </init-param>
</filter>
...
<filter-mapping>
 <filter-name>ExpiresFilter</filter-name>
 <url-pattern>/*</url-pattern>
 <dispatcher>REQUEST</dispatcher>
</filter-mapping>]]></source>

  </subsection>

  <subsection name="Alternate Syntax">
    <p>
    The <code>ExpiresDefault</code> and <code>ExpiresByType</code> directives can also be
    defined in a more readable syntax of the form:
    </p>

    <source><![CDATA[<init-param>
 <param-name>ExpiresDefault</param-name>
 <param-value><base> [plus] {<num>   <type>}*</param-value>
</init-param>

<init-param>
 <param-name>ExpiresByType type</param-name>
 <param-value><base> [plus]   {<num> <type>}*</param-value>
</init-param>

<init-param>
 <param-name>ExpiresByType type;encoding</param-name>
 <param-value><base> [plus]   {<num> <type>}*</param-value>
</init-param>]]></source>
    <p>
    where <code>&lt;base&gt;</code> is one of:
    </p>
    <ul>
    <li><code>access</code></li>
    <li><code>now</code> (equivalent to &#x27;<code>access</code>&#x27;)</li>
    <li><code>modification</code></li>
    </ul>

    <p>
    The <code>plus</code> keyword is optional. <code>&lt;num&gt;</code> should be an
    integer value (acceptable to <code>Integer.parseInt()</code>), and
    <code>&lt;type&gt;</code> is one of:
    </p>
    <ul>
    <li><code>years</code></li>
    <li><code>months</code></li>
    <li><code>weeks</code></li>
    <li><code>days</code></li>
    <li><code>hours</code></li>
    <li><code>minutes</code></li>
    <li><code>seconds</code></li>
    </ul>
    <p>
    For example, any of the following directives can be used to make documents
    expire 1 month after being accessed, by default:
    </p>

    <source><![CDATA[<init-param>
 <param-name>ExpiresDefault</param-name>
 <param-value>access plus 1 month</param-value>
</init-param>

<init-param>
 <param-name>ExpiresDefault</param-name>
 <param-value>access plus 4 weeks</param-value>
</init-param>

<init-param>
 <param-name>ExpiresDefault</param-name>
 <param-value>access plus 30 days</param-value>
</init-param>]]></source>
<p>
The expiry time can be fine-tuned by adding several &#x27;
<code>&lt;num&gt; &lt;type&gt;</code>&#x27; clauses:
</p>

<source><![CDATA[<init-param>
 <param-name>ExpiresByType text/html</param-name>
 <param-value>access plus 1 month 15   days 2 hours</param-value>
</init-param>

<init-param>
 <param-name>ExpiresByType image/gif</param-name>
 <param-value>modification plus 5 hours 3   minutes</param-value>
</init-param>]]></source>
    <p>
    Note that if you use a modification date based setting, the <code>Expires</code>
    header will <strong>not</strong> be added to content that does not come from
    a file on disk. This is due to the fact that there is no modification time
    for such content.
    </p>
  </subsection>

  <subsection name="Expiration headers generation eligibility">
    <p>
    A response is eligible to be enriched by <code>ExpiresFilter</code> if :
    </p>
    <ol>
    <li>no expiration header is defined (<code>Expires</code> header or the
    <code>max-age</code> directive of the <code>Cache-Control</code> header),</li>
    <li>the response status code is not excluded by the directive
    <code>ExpiresExcludedResponseStatusCodes</code>,</li>
    <li>the <code>Content-Type</code> of the response matches one of the types
    defined the in <code>ExpiresByType</code> directives or the
    <code>ExpiresDefault</code> directive is defined.</li>
    </ol>

    <p>
    Note : If <code>Cache-Control</code> header contains other directives than
    <code>max-age</code>, they are concatenated with the <code>max-age</code> directive
    that is added by the <code>ExpiresFilter</code>.
    </p>

  </subsection>

  <subsection name="Expiration configuration selection">
    <p>
    The expiration configuration if elected according to the following algorithm:
    </p>
    <ol>
    <li><code>ExpiresByType</code> matching the exact content-type returned by
    <code>HttpServletResponse.getContentType()</code> possibly including the charset
    (e.g. &#x27;<code>text/xml;charset=UTF-8</code>&#x27;),</li>
    <li><code>ExpiresByType</code> matching the content-type without the charset if
    <code>HttpServletResponse.getContentType()</code> contains a charset (e.g. &#x27;
    <code>text/xml;charset=UTF-8</code>&#x27; -&gt; &#x27;<code>text/xml</code>&#x27;),</li>
    <li><code>ExpiresByType</code> matching the major type (e.g. substring before
    &#x27;<code>/</code>&#x27;) of <code>HttpServletResponse.getContentType()</code>
    (e.g. &#x27;<code>text/xml;charset=UTF-8</code>&#x27; -&gt; &#x27;<code>text</code>
    &#x27;),</li>
    <li><code>ExpiresDefault</code></li>
    </ol>

  </subsection>

  <subsection name="Filter Class Name">

    <p>The filter class name for the Expires Filter is
    <strong><code>org.apache.catalina.filters.ExpiresFilter</code>
    </strong>.</p>

  </subsection>

  <subsection name="Initialisation parameters">

    <p>The <strong>Expires Filter</strong> supports the following
    initialisation parameters:</p>

    <attributes>

      <attribute name="ExpiresExcludedResponseStatusCodes" required="false">
         <p>
         This directive defines the http response status codes for which the
         <code>ExpiresFilter</code> will not generate expiration headers. By default, the
         <code>304</code> status code (&quot;<code>Not modified</code>&quot;) is skipped. The
         value is a comma separated list of http status codes.
         </p>
         <p>
         This directive is useful to ease usage of <code>ExpiresDefault</code> directive.
         Indeed, the behavior of <code>304 Not modified</code> (which does specify a
         <code>Content-Type</code> header) combined with <code>Expires</code> and
         <code>Cache-Control:max-age=</code> headers can be unnecessarily tricky to
         understand.
         </p>
         <p><i>See sample below the table</i></p>
      </attribute>

      <attribute name="ExpiresByType &lt;content-type&gt;" required="false">
         <p>
         This directive defines the value of the <code>Expires</code> header and the
         <code>max-age</code> directive of the <code>Cache-Control</code> header generated for
         documents of the specified type (<i>e.g.</i>, <code>text/html</code>). The second
         argument sets the number of seconds that will be added to a base time to
         construct the expiration date. The <code>Cache-Control: max-age</code> is
         calculated by subtracting the request time from the expiration date and
         expressing the result in seconds.
         </p>
         <p>
         The base time is either the last modification time of the file, or the time
         of the client&#x27;s access to the document. Which should be used is
         specified by the <code>&lt;code&gt;</code> field; <code>M</code> means that the
         file&#x27;s last modification time should be used as the base time, and
         <code>A</code> means the client&#x27;s access time should be used. The duration
         is expressed in seconds. <code>A2592000</code> stands for
         <code>access plus 30 days</code> in alternate syntax.
         </p>
         <p>
         The difference in effect is subtle. If <code>M</code> (<code>modification</code> in
         alternate syntax) is used, all current copies of the document in all caches
         will expire at the same time, which can be good for something like a weekly
         notice that&#x27;s always found at the same URL. If <code>A</code> (
         <code>access</code> or <code>now</code> in alternate syntax) is used, the date of
         expiration is different for each client; this can be good for image files
         that don&#x27;t change very often, particularly for a set of related
         documents that all refer to the same images (<i>i.e.</i>, the images will be
         accessed repeatedly within a relatively short timespan).
         </p>
         <p>
         <strong>Note:</strong> When the content type includes a charset (e.g.
         <code>'ExpiresByType text/xml;charset=utf-8'</code>), Tomcat removes blank chars
         between the '<code>;</code>' and the '<code>charset</code>' keyword. Due to this,
         configuration of an expiration with a charset must <strong>not</strong> include
         such a space character.
         </p>
         <p><i>See sample below the table</i></p>
         <p>
         It overrides, for the specified MIME type <i>only</i>, any
         expiration date set by the <code>ExpiresDefault</code> directive.
         </p>
         <p>
         You can also specify the expiration time calculation using an alternate
         syntax, described earlier in this document.
         </p>
      </attribute>

      <attribute name="ExpiresDefault" required="false">
         <p>
         This directive sets the default algorithm for calculating the
         expiration time for all documents in the affected realm. It can be
         overridden on a type-by-type basis by the <code>ExpiresByType</code> directive. See the
         description of that directive for details about the syntax of the
         argument, and the "alternate syntax"
         description as well.
         </p>
      </attribute>
    </attributes>

    <p><i>Sample: exclude response status codes 302, 500 and 503</i></p>

<source><![CDATA[<init-param>
 <param-name>ExpiresExcludedResponseStatusCodes</param-name>
 <param-value>302, 500, 503</param-value>
</init-param>]]></source>

    <p><i>Sample for ExpiresByType initialization parameter</i></p>

         <source><![CDATA[<init-param>
   <param-name>ExpiresByType text/html</param-name>
   <param-value>access plus 1 month 15   days 2 hours</param-value>
</init-param>

<init-param>
   <!-- 2592000 seconds = 30 days -->
   <param-name>ExpiresByType image/gif</param-name>
   <param-value>A2592000</param-value>
</init-param>]]></source>

  </subsection>

  <subsection name="Troubleshooting">
    <p>
    To troubleshoot, enable logging on the
    <code>org.apache.catalina.filters.ExpiresFilter</code>.
    </p>
    <p>
    Extract of logging.properties
    </p>

    <source>org.apache.catalina.filters.ExpiresFilter.level = FINE    </source>
    <p>
    Sample of initialization log message:
    </p>

    <source>Mar 26, 2010 2:01:41 PM org.apache.catalina.filters.ExpiresFilter init
FINE: Filter initialized with configuration ExpiresFilter[
 excludedResponseStatusCode=[304],
 default=null,
 byType={
    image=ExpiresConfiguration[startingPoint=ACCESS_TIME, duration=[10 MINUTE]],
    text/css=ExpiresConfiguration[startingPoint=ACCESS_TIME, duration=[10 MINUTE]],
    text/javascript=ExpiresConfiguration[startingPoint=ACCESS_TIME, duration=[10 MINUTE]]}]</source>
    <p>
    Sample of per-request log message where <code>ExpiresFilter</code> adds an
    expiration date is below. The message is on one line and is wrapped here
    for better readability.
    </p>

    <source>Mar 26, 2010 2:09:47 PM org.apache.catalina.filters.ExpiresFilter onBeforeWriteResponseBody
FINE: Request "/tomcat.gif" with response status "200"
 content-type "image/gif", set expiration date 3/26/10 2:19 PM</source>
    <p>
    Sample of per-request log message where <code>ExpiresFilter</code> does not add
    an expiration date:
    </p>

    <source>Mar 26, 2010 2:10:27 PM org.apache.catalina.filters.ExpiresFilter onBeforeWriteResponseBody
FINE: Request "/docs/config/manager.html" with response status "200"
 content-type "text/html", no expiration configured</source>
  </subsection>

</section>

<section name="Failed Request Filter">

  <subsection name="Introduction">

    <p>This filter triggers parameters parsing in a request and rejects the
    request if some parameters were skipped during parameter parsing because
    of parsing errors or request size limitations (such as
    <code>maxParameterCount</code> attribute in a
    <a href="http.html">Connector</a>).
    This filter can be used to ensure that none parameter values submitted by
    client are lost.</p>

    <p>Note that parameter parsing may consume the body of an HTTP request, so
    caution is needed if the servlet protected by this filter uses
    <code>request.getInputStream()</code> or <code>request.getReader()</code>
    calls. In general the risk of breaking a web application by adding this
    filter is not so high, because parameter parsing does check content type
    of the request before consuming the request body.</p>

    <p>Note, that for the POST requests to be parsed correctly, a
    <code>SetCharacterEncodingFilter</code> filter must be configured above
    this one. See CharacterEncoding page in the FAQ for details.</p>

    <p>The request is rejected with HTTP status code 400 (Bad Request).</p>

  </subsection>

  <subsection name="Filter Class Name">

    <p>The filter class name for the Failed Request Filter is
    <strong><code>org.apache.catalina.filters.FailedRequestFilter</code>
    </strong>.</p>

  </subsection>

  <subsection name="Initialisation parameters">

    <p>The Failed Request Filter does not support any initialization parameters.</p>

  </subsection>

</section>

<section name="Remote Address Filter">

  <subsection name="Introduction">

    <p>The <strong>Remote Address Filter</strong> allows you to compare the
    IP address of the client that submitted this request against one or more
    <em>regular expressions</em>, and either allow the request to continue
    or refuse to process the request from this client. </p>

    <p>The syntax for <em>regular expressions</em> is different than that for
    'standard' wildcard matching. Tomcat uses the <code>java.util.regex</code>
    package. Please consult the Java documentation for details of the
    expressions supported.</p>

    <p><strong>Note:</strong> There is a caveat when using this filter with
    IPv6 addresses. Format of the IP address that this valve is processing
    depends on the API that was used to obtain it. If the address was obtained
    from Java socket using Inet6Address class, its format will be
    <code>x:x:x:x:x:x:x:x</code>. That is, the IP address for localhost
    will be <code>0:0:0:0:0:0:0:1</code> instead of the more widely used
    <code>::1</code>. Consult your access logs for the actual value.</p>

    <p>See also: <a href="#Remote_Host_Filter">Remote Host Filter</a>.</p>
  </subsection>

  <subsection name="Filter Class Name">

    <p>The filter class name for the Remote Address Filter is
    <strong><code>org.apache.catalina.filters.RemoteAddrFilter</code>
    </strong>.</p>

  </subsection>

  <subsection name="Initialisation parameters">

    <p>The <strong>Remote Address Filter</strong> supports the following
    initialisation parameters:</p>

    <attributes>

      <attribute name="allow" required="false">
        <p>A regular expression (using <code>java.util.regex</code>) that the
        remote client&apos;s IP address is compared to.  If this attribute
        is specified, the remote address MUST match for this request to be
        accepted.  If this attribute is not specified, all requests will be
        accepted UNLESS the remote address matches a <code>deny</code>
        pattern.</p>
      </attribute>

      <attribute name="deny" required="false">
        <p>A regular expression (using <code>java.util.regex</code>) that the
        remote client's IP address is compared to.  If this attribute
        is specified, the remote address MUST NOT match for this request to be
        accepted.  If this attribute is not specified, request acceptance is
        governed solely by the <code>accept</code> attribute.</p>
      </attribute>

      <attribute name="denyStatus" required="false">
        <p>HTTP response status code that is used when rejecting denied
        request. The default value is <code>403</code>. For example,
        it can be set to the value <code>404</code>.</p>
      </attribute>

    </attributes>

  </subsection>

  <subsection name="Example">
    <p>To allow access only for the clients connecting from localhost:</p>
<source><![CDATA[    <filter>
      <filter-name>Remote Address Filter</filter-name>
      <filter-class>org.apache.catalina.filters.RemoteAddrFilter</filter-class>
      <init-param>
        <param-name>allow</param-name>
        <param-value>127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1</param-value>
      </init-param>
    </filter>
    <filter-mapping>
      <filter-name>Remote Address Filter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>]]></source>
  </subsection>

</section>


<section name="Remote Host Filter">

  <subsection name="Introduction">

    <p>The <strong>Remote Host Filter</strong> allows you to compare the
    hostname of the client that submitted this request against one or more
    <em>regular expressions</em>, and either allow the request to continue
    or refuse to process the request from this client. </p>

    <p>The syntax for <em>regular expressions</em> is different than that for
    'standard' wildcard matching. Tomcat uses the <code>java.util.regex</code>
    package. Please consult the Java documentation for details of the
    expressions supported.</p>

    <p><strong>Note:</strong> This filter processes the value returned by
    method <code>ServletRequest.getRemoteHost()</code>. To allow the method
    to return proper host names, you have to enable "DNS lookups" feature on
    a <strong>Connector</strong>.</p>

    <p>See also: <a href="#Remote_Address_Filter">Remote Address Filter</a>,
    <a href="http.html">HTTP Connector</a> configuration.</p>
  </subsection>

  <subsection name="Filter Class Name">

    <p>The filter class name for the Remote Address Filter is
    <strong><code>org.apache.catalina.filters.RemoteHostFilter</code>
    </strong>.</p>

  </subsection>

  <subsection name="Initialisation parameters">

    <p>The <strong>Remote Host Filter</strong> supports the following
    initialisation parameters:</p>

    <attributes>

      <attribute name="allow" required="false">
        <p>A regular expression (using <code>java.util.regex</code>) that the
        remote client&apos;s hostname is compared to.  If this attribute
        is specified, the remote hostname MUST match for this request to be
        accepted.  If this attribute is not specified, all requests will be
        accepted UNLESS the remote hostname matches a <code>deny</code>
        pattern.</p>
      </attribute>

      <attribute name="deny" required="false">
        <p>A regular expression (using <code>java.util.regex</code>) that the
        remote client's hostname is compared to.  If this attribute
        is specified, the remote hostname MUST NOT match for this request to be
        accepted.  If this attribute is not specified, request acceptance is
        governed solely by the <code>accept</code> attribute.</p>
      </attribute>

      <attribute name="denyStatus" required="false">
        <p>HTTP response status code that is used when rejecting denied
        request. The default value is <code>403</code>. For example,
        it can be set to the value <code>404</code>.</p>
      </attribute>

    </attributes>

  </subsection>

</section>


<section name="Remote IP Filter">

  <subsection name="Introduction">

    <p>Tomcat port of
    <a href="http://httpd.apache.org/docs/trunk/mod/mod_remoteip.html">mod_remoteip</a>,
    this filter replaces the apparent client remote IP address and hostname for
    the request with the IP address list presented by a proxy or a load balancer
    via a request headers (e.g. &quot;X-Forwarded-For&quot;).</p>

    <p>Another feature of this filter is to replace the apparent scheme
    (http/https), server port and <code>request.secure</code> with the scheme presented
    by a proxy or a load balancer via a request header
    (e.g. &quot;X-Forwarded-Proto&quot;).</p>

    <p>If used in conjunction with Remote Address/Host filters then this filter
    should be defined first to ensure that the correct client IP address is
    presented to the Remote Address/Host filters.</p>

    <p><strong>Note:</strong> By default this filter has no effect on the
    values that are written into access log. The original values are restored
    when request processing leaves the filter and that always happens earlier
    than access logging. To pass the remote address, remote host, server port
    and protocol values set by this filter to the access log,
    they are put into request attributes. Publishing these values here
    is enabled by default, but <code>AccessLogValve</code> should be explicitly
    configured to use them. See documentation for
    <code>requestAttributesEnabled</code> attribute of
    <code>AccessLogValve</code>.</p>

    <p>The names of request attributes that are set by this filter
    and can be used by access logging are the following:</p>

    <ul>
      <li><code>org.apache.catalina.AccessLog.RemoteAddr</code></li>
      <li><code>org.apache.catalina.AccessLog.RemoteHost</code></li>
      <li><code>org.apache.catalina.AccessLog.Protocol</code></li>
      <li><code>org.apache.catalina.AccessLog.ServerPort</code></li>
      <li><code>org.apache.tomcat.remoteAddr</code></li>
    </ul>

  </subsection>

  <subsection name="Filter Class Name">

    <p>The filter class name for the Remote IP Filter is
    <strong><code>org.apache.catalina.filters.RemoteIpFilter</code>
    </strong>.</p>

  </subsection>

  <subsection name="Basic configuration to handle &#x27;x-forwarded-for&#x27;">
    <p>
    The filter will process the <code>x-forwarded-for</code> http header.
    </p>
    <source><![CDATA[      <filter>
        <filter-name>RemoteIpFilter</filter-name>
        <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
      </filter>

      <filter-mapping>
        <filter-name>RemoteIpFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
      </filter-mapping>]]></source>
  </subsection>

  <subsection name="Basic configuration to handle &#x27;x-forwarded-for&#x27; and &#x27;x-forwarded-proto&#x27;">

    <p>
    The filter will process <code>x-forwarded-for</code> and
    <code>x-forwarded-proto</code> http headers. Expected value for the
    <code>x-forwarded-proto</code> header in case of SSL connections is
    <code>https</code> (case insensitive). </p>
    <source><![CDATA[      <filter>
        <filter-name>RemoteIpFilter</filter-name>
        <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
        <init-param>
          <param-name>protocolHeader</param-name>
          <param-value>x-forwarded-proto</param-value>
        </init-param>
      </filter>

      <filter-mapping>
        <filter-name>RemoteIpFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
      </filter-mapping>]]></source>
  </subsection>

  <subsection name="Advanced configuration with internal proxies">
    <p>RemoteIpFilter configuration: </p>
    <source><![CDATA[     <filter>
       <filter-name>RemoteIpFilter</filter-name>
       <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
       <init-param>
         <param-name>allowedInternalProxies</param-name>
         <param-value>192\.168\.0\.10|192\.168\.0\.11</param-value>
       </init-param>
       <init-param>
         <param-name>remoteIpHeader</param-name>
         <param-value>x-forwarded-for</param-value>
       </init-param>
       <init-param>
         <param-name>remoteIpProxiesHeader</param-name>
         <param-value>x-forwarded-by</param-value>
       </init-param>
       <init-param>
         <param-name>protocolHeader</param-name>
         <param-value>x-forwarded-proto</param-value>
       </init-param>
     </filter>]]></source>
    <p>Request values:</p>
    <table class="defaultTable">
      <tr>
        <th>Property</th>
        <th>Value Before RemoteIpFilter</th>
        <th>Value After RemoteIpFilter</th>
      </tr>
      <tr>
        <td> request.remoteAddr </td>
        <td> 192.168.0.10 </td>
        <td> 140.211.11.130 </td>
      </tr>
      <tr>
        <td> request.header<code>[</code>&#x27;x-forwarded-for&#x27;<code>]</code> </td>
        <td> 140.211.11.130, 192.168.0.10 </td>
        <td> null </td>
      </tr>
      <tr>
        <td> request.header<code>[</code>&#x27;x-forwarded-by&#x27;<code>]</code> </td>
        <td> null </td>
        <td> null </td>
      </tr>
      <tr>
        <td> request.header<code>[</code>&#x27;x-forwarded-proto&#x27;<code>]</code> </td>
        <td> https </td>
        <td> https </td>
      </tr>
      <tr>
        <td> request.scheme </td>
        <td> http </td>
        <td> https </td>
      </tr>
      <tr>
        <td> request.secure </td>
        <td> false </td>
        <td> true </td>
      </tr>
      <tr>
        <td> request.serverPort </td>
        <td> 80 </td>
        <td> 443 </td>
      </tr>
    </table>

    <p>
    Note : <code>x-forwarded-by</code> header is <code>null</code> because only
    internal proxies has been traversed by the request.
    <code>x-forwarded-for</code> is <code>null</code> because all the proxies are
    trusted or internal.
    </p>
  </subsection>


  <subsection name="Advanced configuration with trusted proxies">
    <p>RemoteIpFilter configuration: </p>
    <source><![CDATA[     <filter>
       <filter-name>RemoteIpFilter</filter-name>
       <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
       <init-param>
         <param-name>allowedInternalProxies</param-name>
         <param-value>192\.168\.0\.10|192\.168\.0\.11</param-value>
       </init-param>
       <init-param>
         <param-name>remoteIpHeader</param-name>
         <param-value>x-forwarded-for</param-value>
       </init-param>
       <init-param>
         <param-name>remoteIpProxiesHeader</param-name>
         <param-value>x-forwarded-by</param-value>
       </init-param>
       <init-param>
         <param-name>trustedProxies</param-name>
         <param-value>proxy1|proxy2</param-value>
       </init-param>
     </filter>]]></source>
    <p>Request values:</p>
    <table class="defaultTable">
      <tr>
        <th>Property</th>
        <th>Value Before RemoteIpFilter</th>
        <th>Value After RemoteIpFilter</th>
      </tr>
      <tr>
        <td> request.remoteAddr </td>
        <td> 192.168.0.10 </td>
        <td> 140.211.11.130 </td>
      </tr>
      <tr>
        <td> request.header<code>[</code>&#x27;x-forwarded-for&#x27;<code>]</code> </td>
        <td> 140.211.11.130, proxy1, proxy2 </td>
        <td> null </td>
      </tr>
      <tr>
        <td> request.header<code>[</code>&#x27;x-forwarded-by&#x27;<code>]</code> </td>
        <td> null </td>
        <td> proxy1, proxy2 </td>
      </tr>
    </table>

    <p>
    Note : <code>proxy1</code> and <code>proxy2</code> are both trusted proxies that
    come in <code>x-forwarded-for</code> header, they both are migrated in
    <code>x-forwarded-by</code> header. <code>x-forwarded-for</code> is <code>null</code>
    because all the proxies are trusted or internal.
    </p>
  </subsection>

  <subsection name="Advanced configuration with internal and trusted proxies">
    <p>RemoteIpFilter configuration: </p>
    <source><![CDATA[     <filter>
       <filter-name>RemoteIpFilter</filter-name>
       <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
       <init-param>
         <param-name>allowedInternalProxies</param-name>
         <param-value>192\.168\.0\.10|192\.168\.0\.11</param-value>
       </init-param>
       <init-param>
         <param-name>remoteIpHeader</param-name>
         <param-value>x-forwarded-for</param-value>
       </init-param>
       <init-param>
         <param-name>remoteIpProxiesHeader</param-name>
         <param-value>x-forwarded-by</param-value>
       </init-param>
       <init-param>
         <param-name>trustedProxies</param-name>
         <param-value>proxy1|proxy2</param-value>
       </init-param>
     </filter>]]></source>
    <p>Request values:</p>
    <table class="defaultTable">
      <tr>
        <th>Property</th>
        <th>Value Before RemoteIpFilter</th>
        <th>Value After RemoteIpFilter</th>
      </tr>
      <tr>
        <td> request.remoteAddr </td>
        <td> 192.168.0.10 </td>
        <td> 140.211.11.130 </td>
      </tr>
      <tr>
        <td> request.header<code>[</code>&#x27;x-forwarded-for&#x27;<code>]</code> </td>
        <td> 140.211.11.130, proxy1, proxy2, 192.168.0.10 </td>
        <td> null </td>
      </tr>
      <tr>
        <td> request.header<code>[</code>&#x27;x-forwarded-by&#x27;<code>]</code> </td>
        <td> null </td>
        <td> proxy1, proxy2 </td>
      </tr>
    </table>

    <p>
    Note : <code>proxy1</code> and <code>proxy2</code> are both trusted proxies that
    come in <code>x-forwarded-for</code> header, they both are migrated in
    <code>x-forwarded-by</code> header. As <code>192.168.0.10</code> is an internal
    proxy, it does not appear in <code>x-forwarded-by</code>.
    <code>x-forwarded-for</code> is <code>null</code> because all the proxies are
    trusted or internal.
    </p>
  </subsection>

  <subsection name="Advanced configuration with an untrusted proxy">

    <p>RemoteIpFilter configuration: </p>
    <source><![CDATA[     <filter>
       <filter-name>RemoteIpFilter</filter-name>
       <filter-class>org.apache.catalina.filters.RemoteIpFilter</filter-class>
       <init-param>
         <param-name>allowedInternalProxies</param-name>
         <param-value>192\.168\.0\.10|192\.168\.0\.11</param-value>
       </init-param>
       <init-param>
         <param-name>remoteIpHeader</param-name>
         <param-value>x-forwarded-for</param-value>
       </init-param>
       <init-param>
         <param-name>remoteIpProxiesHeader</param-name>
         <param-value>x-forwarded-by</param-value>
       </init-param>
       <init-param>
         <param-name>trustedProxies</param-name>
         <param-value>proxy1|proxy2</param-value>
       </init-param>
     </filter>]]></source>
    <p>Request values:</p>
    <table class="defaultTable">
      <tr>
        <th>Property</th>
        <th>Value Before RemoteIpFilter</th>
        <th>Value After RemoteIpFilter</th>
      </tr>
      <tr>
        <td> request.remoteAddr </td>
        <td> 192.168.0.10 </td>
        <td> untrusted-proxy </td>
      </tr>
      <tr>
        <td> request.header<code>[</code>&#x27;x-forwarded-for&#x27;<code>]</code> </td>
        <td> 140.211.11.130, untrusted-proxy, proxy1 </td>
        <td> 140.211.11.130 </td>
      </tr>
      <tr>
        <td> request.header<code>[</code>&#x27;x-forwarded-by&#x27;<code>]</code> </td>
        <td> null </td>
        <td> proxy1 </td>
      </tr>
    </table>

    <p>
    Note : <code>x-forwarded-by</code> holds the trusted proxy <code>proxy1</code>.
    <code>x-forwarded-by</code> holds <code>140.211.11.130</code> because
    <code>untrusted-proxy</code> is not trusted and thus, we can not trust that
    <code>untrusted-proxy</code> is the actual remote ip.
    <code>request.remoteAddr</code> is <code>untrusted-proxy</code> that is an IP
    verified by <code>proxy1</code>.
    </p>
  </subsection>

  <subsection name="Initialisation parameters">

    <p>The <strong>Remote IP Filter</strong> supports the
    following initialisation parameters:</p>

    <attributes>

      <attribute name="remoteIpHeader" required="false">
        <p>Name of the HTTP Header read by this valve that holds the list of
        traversed IP addresses starting from the requesting client. If not
        specified, the default of <code>x-forwarded-for</code> is used.</p>
      </attribute>

      <attribute name="internalProxies" required="false">
        <p>Regular expression (using <code>java.util.regex</code>) that a
        proxy&apos;s IP address must match to be considered an internal proxy.
        Internal proxies that appear in the <strong>remoteIpHeader</strong> will
        be trusted and will not appear in the <strong>proxiesHeader</strong>
        value. If not specified the default value of <code>
        10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|169\.254\.\d{1,3}\.\d{1,3}|127\.\d{1,3}\.\d{1,3}\.\d{1,3}|172\.1[6-9]{1}\.\d{1,3}\.\d{1,3}|172\.2[0-9]{1}\.\d{1,3}\.\d{1,3}|172\.3[0-1]{1}\.\d{1,3}\.\d{1,3}
        </code> will be used.</p>
      </attribute>

      <attribute name="proxiesHeader" required="false">
        <p>Name of the HTTP header created by this valve to hold the list of
        proxies that have been processed in the incoming
        <strong>remoteIpHeader</strong>. If not specified, the default of
        <code>x-forwarded-by</code> is used.</p>
      </attribute>

      <attribute name="requestAttributesEnabled" required="false">
        <p>Set to <code>true</code> to set the request attributes used by
        AccessLog implementations to override the values returned by the
        request for remote address, remote host, server port and protocol.
        Request attributes are also used to enable the forwarded remote address
        to be displayed on the status page of the Manager web application.
        If not set, the default value of <code>true</code> will be used.</p>
      </attribute>

      <attribute name="trustedProxies" required="false">
        <p>Regular expression (using <code>java.util.regex</code>) that a
        proxy&apos;s IP address must match to be considered an trusted proxy.
        Trusted proxies that appear in the <strong>remoteIpHeader</strong> will
        be trusted and will appear in the <strong>proxiesHeader</strong> value.
        If not specified, no proxies will be trusted.</p>
      </attribute>

      <attribute name="protocolHeader" required="false">
        <p>Name of the HTTP Header read by this valve that holds the protocol
        used by the client to connect to the proxy. If not specified, the
        default of <code>null</code> is used.</p>
      </attribute>

      <attribute name="portHeader" required="false">
        <p>Name of the HTTP Header read by this valve that holds the port
        used by the client to connect to the proxy. If not specified, the
        default of <code>null</code> is used.</p>
      </attribute>

      <attribute name="protocolHeaderHttpsValue" required="false">
        <p>Value of the <strong>protocolHeader</strong> to indicate that it is
        an HTTPS request. If not specified, the default of <code>https</code> is
        used.</p>
      </attribute>

      <attribute name="httpServerPort" required="false">
        <p>Value returned by <code>ServletRequest.getServerPort()</code>
        when the <strong>protocolHeader</strong> indicates <code>http</code>
        protocol and no <strong>portHeader</strong> is present. If not
        specified, the default of <code>80</code> is used.</p>
      </attribute>

      <attribute name="httpsServerPort" required="false">
        <p>Value returned by <code>ServletRequest.getServerPort()</code>
        when the <strong>protocolHeader</strong> indicates <code>https</code>
        protocol and no <strong>portHeader</strong> is present. If not
        specified, the default of <code>443</code> is used.</p>
      </attribute>

      <attribute name="changeLocalPort" required="false">
        <p>If <code>true</code>, the value returned by
        <code>ServletRequest.getLocalPort()</code> and
        <code>ServletRequest.getServerPort()</code> is modified by the this
        filter. If not specified, the default of <code>false</code> is used.</p>
      </attribute>

    </attributes>


  </subsection>

</section>


<section name="Request Dumper Filter">

  <subsection name="Introduction">

    <p>The Request Dumper Filter logs information from the request and response
    objects and is intended to be used for debugging purposes. When using this
    Filter, it is recommended that the
    <code>org.apache.catalina.filter.RequestDumperFilter</code> logger is
    directed to a dedicated file and that the
    <code>org.apache.juli.VerbatimFormmater</code> is used.</p>

    <p><strong>WARNING: Using this filter has side-effects.</strong>  The
    output from this filter includes any parameters included with the request.
    The parameters will be decoded using the default platform encoding. Any
    subsequent calls to <code>request.setCharacterEncoding()</code> within
    the web application will have no effect.</p>

  </subsection>

  <subsection name="Filter Class Name">

    <p>The filter class name for the Request Dumper Filter is
    <strong><code>org.apache.catalina.filters.RequestDumperFilter</code>
    </strong>.</p>

  </subsection>

  <subsection name="Initialisation parameters">

    <p>The Request Dumper Filter does not support any initialization
    parameters.</p>

  </subsection>

  <subsection name="Sample Configuration">

    <p>The following entries in a web application's web.xml would enable the
    Request Dumper filter for all requests for that web application. If the
    entries were added to <code>CATALINA_BASE/conf/web.xml</code>, the Request
    Dumper Filter would be enabled for all web applications.</p>
    <source><![CDATA[<filter>
    <filter-name>requestdumper</filter-name>
    <filter-class>
        org.apache.catalina.filters.RequestDumperFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>requestdumper</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>]]></source>

    <p>The following entries in CATALINA_BASE/conf/logging.properties would
    create a separate log file for the Request Dumper Filter output.</p>
    <source># To this configuration below, 1request-dumper.org.apache.juli.FileHandler
# also needs to be added to the handlers property near the top of the file
1request-dumper.org.apache.juli.FileHandler.level = INFO
1request-dumper.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1request-dumper.org.apache.juli.FileHandler.prefix = request-dumper.
1request-dumper.org.apache.juli.FileHandler.formatter = org.apache.juli.VerbatimFormatter
org.apache.catalina.filters.RequestDumperFilter.level = INFO
org.apache.catalina.filters.RequestDumperFilter.handlers = \
  1request-dumper.org.apache.juli.FileHandler</source>
  </subsection>
</section>


<section name="Set Character Encoding Filter">

  <subsection name="Introduction">

    <p>User agents don&apos;t always include character encoding information in
    requests. Depending on the how the request is processed, usually the
    default encoding of ISO-8859-1 is used. This is not always
    desirable. This filter provides options for setting that encoding or
    forcing it to a particular value. Essentially this filter calls
    <code>ServletRequest.setCharacterEncoding()</code> method.</p>

    <p>Effectively the value set by this filter is used when parsing parameters
    in a POST request, if parameter parsing occurs later than this filter. Thus
    the order of filter mappings is important. Note that the encoding for GET
    requests is not set here, but on a <b>Connector</b>. See
    CharacterEncoding page in the FAQ for details.</p>

  </subsection>

  <subsection name="Filter Class Name">

    <p>The filter class name for the Set Character Encoding Filter is
    <strong><code>org.apache.catalina.filters.SetCharacterEncodingFilter</code>
    </strong>.</p>

  </subsection>

  <subsection name="Initialisation parameters">

    <p>The Set Character Encoding Filter supports the following initialization
    parameters:</p>

    <attributes>

      <attribute name="encoding" required="true">
        <p>Name of the character encoding which should be set.</p>
      </attribute>

      <attribute name="ignore" required="false">
        <p>Determines if any character encoding specified by the user agent is
        ignored. If this attribute is <code>true</code>, any value provided by
        the user agent is ignored. If <code>false</code>, the encoding is only
        set if the user agent did not specify an encoding. The default value
        is <code>false</code>.</p>
      </attribute>

    </attributes>

  </subsection>

</section>


<section name="WebDAV Fix Filter">

  <subsection name="Introduction">

    <p>Microsoft operating systems have two WebDAV clients. One is used with
    port 80, the other is used for all other ports. The implementation used with
    port 80 does not adhere to the WebDAV specification and fails when trying to
    communicate with the Tomcat WebDAV Servlet. This Filter provides a fix for
    this by forcing the use of the WebDAV implementation that works, even when
    connecting via port 80.</p>

  </subsection>

  <subsection name="Filter Class Name">

    <p>The filter class name for the WebDAV Fix Filter is
    <strong><code>org.apache.catalina.filters.WebdavFixFilter</code>
    </strong>.</p>

  </subsection>

  <subsection name="Initialisation parameters">

    <p>The WebDAV Fix Filter does not support any initialization parameters.</p>

  </subsection>

</section>

</body>

</document>
