コンテナ提供フィルター
目次
はじめに
Tomcatは、$CATALINA_BASE/conf/web.xml
を使用してすべてのWebアプリケーションで使用するために設定できる、またはアプリケーションのWEB-INF/web.xml
で設定することで個々のWebアプリケーションで使用するために設定できる多数のフィルターを提供します。各フィルターについては以下に説明します。
この説明では、変数名$CATALINA_BASEを使用して、ほとんどの相対パスが解決される基準ディレクトリを参照しています。$CATALINA_BASEディレクトリを設定することでTomcatを複数のインスタンス用に設定していない場合は、$CATALINA_BASEはTomcatをインストールしたディレクトリである$CATALINA_HOMEの値に設定されます。
デフォルト文字セットフィルターの追加
はじめに
HTTP仕様では、「text」メディアタイプのメディアサブタイプに文字セットが指定されていない場合は、ISO-8859-1文字セットを使用する必要があると明記されています。ただし、ブラウザは文字セットを自動検出しようとすることがあります。これは、攻撃者がXSS攻撃を実行するために悪用される可能性があります。Internet Explorerなどのブラウザには、この動作を有効にするオプションがあります。
このフィルターは、文字セットを明示的に設定することで攻撃を防ぎます。ユーザーによって提供された文字セットが明示的に上書きされない限り、ブラウザは明示的に設定された文字セットに従うため、XSS攻撃を防ぎます。
フィルタークラス名
デフォルト文字セットフィルターのフィルタークラス名はorg.apache.catalina.filters.AddDefaultCharsetFilter
です。
初期化パラメータ
デフォルト文字セットフィルターは、次の初期化パラメータをサポートしています
属性 | 説明 |
---|---|
encoding |
サーブレットによって他の文字セットが明示的に設定されていない場合に設定する必要がある文字セットの名前。このパラメータには、 |
CORSフィルター
はじめに
このフィルターは、クロスオリジンリクエストを有効にするメカニズムであるW3CのCORS(クロスオリジンリソース共有)仕様の実装です。
このフィルターは、必要なAccess-Control-*
ヘッダーをHttpServletResponseオブジェクトに追加することで機能します。このフィルターは、HTTPレスポンススプリッティングも防止します。リクエストが無効であるか、許可されていない場合、リクエストはHTTPステータスコード403(禁止)で拒否されます。このフィルターによるリクエスト処理を示すフローチャートを利用できます。
このフィルターを使用するために必要な最小限の設定は次のとおりです。
<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>
上記の設定によりフィルターは有効になりますが、クロスオリジンポリシーは緩和されません。最低限、クロスオリジンリクエストを有効にするために、以下で説明するcors.allowed.origins初期化パラメータを追加する必要があります。要件に応じて、追加の設定が必要になる場合があります。
このフィルターのインスタンスは、1つのポリシーのみを実装できます。異なるポリシー(例:異なる許可されたオリジン)をWebアプリケーション内の異なるURLまたはURLセットに適用する場合は、設定する各ポリシーに対して、このフィルターの個別のインスタンスを設定する必要があります。
フィルタークラス名
CORSフィルターのフィルタークラス名はorg.apache.catalina.filters.CorsFilter
です。
初期化パラメータ
CORSフィルターは、次の初期化パラメータをサポートしています
属性 | 説明 |
---|---|
cors.allowed.origins |
リソースへのアクセスが許可されるオリジンのリスト。リソースへのアクセスを任意のオリジンから有効にするには |
cors.allowed.methods |
クロスオリジンリクエストを使用してリソースにアクセスするために使用できるHTTPメソッドのコンマ区切りのリスト。これらは、事前飛行レスポンスの |
cors.allowed.headers |
実際の要求を行う際に使用できる要求ヘッダーのコンマ区切りのリスト。これらのヘッダーは、事前飛行レスポンスの |
cors.exposed.headers |
ブラウザがアクセスできる単純なレスポンスヘッダー以外のヘッダーのコンマ区切りのリスト。これらは、事前飛行レスポンスの |
cors.preflight.maxage |
ブラウザが事前飛行リクエストの結果をキャッシュできる秒数。これは、事前飛行レスポンスの |
cors.support.credentials |
リソースがユーザー資格情報をサポートするかどうかを示すフラグ。このフラグは、事前飛行レスポンスの |
cors.request.decorate |
CORS固有の属性をHttpServletRequestオブジェクトに追加するかどうかを制御するフラグ。デフォルト: |
デフォルトを上書きする、より高度な設定の例を次に示します。
<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>https://apache.dokyumento.jp</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>
CORSフィルターとHttpServletRequest属性
CORSフィルターは、ダウンストリームで消費するために、HttpServletRequestオブジェクトにリクエストに関する情報を追加します。cors.request.decorate
初期化パラメータがtrue
の場合、次の属性が設定されます。
- cors.isCorsRequest:リクエストがCORSリクエストかどうかを判断するためのフラグ。
- cors.request.origin:オリジンURL、つまりリクエストの発信元のページのURL。
- cors.request.type:CORSリクエストの種類。可能な値
SIMPLE
:事前飛行リクエストの前にないリクエスト。ACTUAL
:事前飛行リクエストの前にあるリクエスト。PRE_FLIGHT
:事前飛行リクエスト。NOT_CORS
:通常の同一オリジンリクエスト。INVALID_CORS
:無効なクロスオリジンリクエスト。
- cors.request.headers:事前飛行リクエストの
Access-Control-Request-Headers
ヘッダーとして送信されたリクエストヘッダー。
CSRF防止フィルター
はじめに
このフィルターは、Webアプリケーションの基本的なCSRF保護を提供します。このフィルターは、/*
にマッピングされ、クライアントに返されるすべてのURLがHttpServletResponse#encodeRedirectURL(String)
またはHttpServletResponse#encodeURL(String)
への呼び出しによってエンコードされていることを前提としています。
このフィルターは、ノンスを生成してセッションに格納することでCSRFを防ぎます。URLも、同じノンスを使用してエンコードされます。次のリクエストを受信すると、リクエスト内のノンスがセッション内のノンスと比較され、両方が同じ場合のみ、リクエストは続行されます。
フィルタークラス名
CSRF防止フィルターのフィルタークラス名はorg.apache.catalina.filters.CsrfPreventionFilter
です。
初期化パラメータ
CSRF防止フィルターは、次の初期化パラメータをサポートしています
属性 | 説明 |
---|---|
denyStatus |
拒否されたリクエストを拒否する際に使用されるHTTPレスポンスステータスコード。デフォルト値は |
enforce |
強制を有効または無効にするフラグ。強制が無効になっている場合、CsrfPreventionFilterはすべてのリクエストを許可し、CSRFの失敗をDEBUGメッセージとしてログに記録します。デフォルトはtrueで、CSRF保護の強制が有効になります。 |
entryPoints |
有効なノンスの存在がテストされないURLのコンマ区切りのリスト。これらは、離れたアプリケーションからナビゲートした後に保護されたアプリケーションにナビゲートするための方法を提供するために使用されます。エントリポイントはHTTP GETリクエストに限定され、セキュリティに影響を与えるアクションをトリガーするべきではありません。 |
nonceCacheSize |
並列リクエストをサポートするためにLRU方式でキャッシュされる、以前に発行されたノンスの数です。ブラウザの更新や戻るボタンの使用、以前のノンスが現在のノンスではなく送信される可能性のある同様の動作による制限付きの使用が含まれます。設定しない場合、デフォルト値の5が使用されます。 |
nonceRequestParameterName |
ノンスに使用されるリクエストパラメータの名前です。設定しない場合、デフォルト値の |
randomClass |
ノンスを生成するために使用するクラスの名前です。このクラスは |
noNonceURLPatterns |
CSRFノンスが追加されないURLパターンのリストです。リソースキャッシングなどを妨げる可能性のある一意のURLを作成しないように、特定のURLにノンスを追加しない場合があります。 サポートされているパターンにはいくつかの種類があります。
デフォルトは |
REST APIのためのCSRF防止フィルター
はじめに
このフィルタは、REST APIに対する基本的なCSRF保護を提供します。CSRF保護は、保護されたリソースに対する変更を行うHTTPリクエスト(GET、HEAD、OPTIONSとは異なる)のみに適用されます。有効なノンスを提供するカスタムヘッダーX-CSRF-Token
に基づいています。
REST APIのCSRF保護メカニズムは、次の手順で構成されます。
- クライアントが有効なノンスを要求します。これは、保護されたリソースに対する変更を行わない「Fetch」リクエストを使用して実行されます。
- サーバーは、現在のユーザーセッションにマップされた有効なノンスで応答します。
- クライアントは、同じユーザーセッションの範囲内で、後続の変更リクエストでこのノンスを提供します。
- サーバーは、有効なノンスが含まれていない保護されたリソースに対するすべての変更リクエストを拒否します。
基本的な設定例
サーバー側では
- すべてのCSRF保護されたREST APIは、認証メカニズムで保護する必要があります。
- このフィルタで変更を行うREST APIを保護します。
- 変更を行わない操作を少なくとも1つ提供します。
<filter>
<filter-name>RestCSRF</filter-name>
<filter-class>org.apache.catalina.filters.RestCsrfPreventionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RestCSRF</filter-name>
<!-- Modifying operations -->
<url-pattern>/resources/removeResource</url-pattern>
<url-pattern>/resources/addResource</url-pattern>
<!-- Non-modifying operations -->
<url-pattern>/resources/listResources</url-pattern>
</filter-mapping>
クライアント側では
- 有効なノンスを取得するために、変更を行わない「Fetch」リクエストを行います。追加ヘッダー
X-CSRF-Token: Fetch
を送信することで実行できます。 - 返されたセッションIDとノンスをキャッシュして、保護されたリソースに対する後続の変更リクエストで提供します。
- 無効または不足しているノンス、セッションの期限切れ、またはサーバーによってセッションIDが変更された場合、変更リクエストが拒否され、ヘッダー
X-CSRF-Token: Required
が返されます。
Client Request:
GET /rest/resources/listResources HTTP/1.1
X-CSRF-Token: Fetch
Authorization: Basic ...
Host: localhost:8080
...
Server Response:
HTTP/1.1 200 OK
Set-Cookie: JSESSIONID=...; Path=/rest; HttpOnly
X-CSRF-Token: ...
...
Client Request:
POST /rest/resources/addResource HTTP/1.1
Cookie: JSESSIONID=...
X-CSRF-Token: ...
Authorization: Basic ...
Host: localhost:8080
...
Server Response:
HTTP/1.1 200 OK
...
RestCsrfPreventionFilterとHttpServletRequestパラメータ
クライアントがREST APIへの呼び出しでカスタムヘッダーを挿入できない場合、有効なノンスがリクエストパラメータとして受け入れられるように構成できる追加機能があります。
注:X-CSRF-Token
ヘッダーがある場合、リクエスト内の同じ名前のパラメータよりも優先して使用されます。リクエストパラメータは新しいノンスの取得に使用できません。新しいノンスを要求するには、ヘッダーのみを使用できます。
<filter>
<filter-name>RestCSRF</filter-name>
<filter-class>org.apache.catalina.filters.RestCsrfPreventionFilter</filter-class>
<init-param>
<param-name>pathsAcceptingParams</param-name>
<param-value>/resources/removeResource,/resources/addResource</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>RestCSRF</filter-name>
<url-pattern>/resources/*</url-pattern>
</filter-mapping>
フィルタークラス名
REST APIのCSRF防止フィルタのフィルタクラス名はorg.apache.catalina.filters.RestCsrfPreventionFilter
です。
初期化パラメータ
REST APIのCSRF防止フィルタは、次の初期化パラメータをサポートしています。
属性 | 説明 |
---|---|
denyStatus |
拒否されたリクエストを拒否する際に使用されるHTTPレスポンスステータスコード。デフォルト値は |
pathsAcceptingParams |
リクエストパラメータ |
randomClass |
ノンスを生成するために使用するクラスの名前です。このクラスは |
Expiresフィルター
はじめに
ExpiresFilterは、Apache mod_expiresのJava Servlet APIポートです。このフィルタは、サーバー応答のExpires
HTTPヘッダーとCache-Control
HTTPヘッダーのmax-age
ディレクティブの設定を制御します。有効期限日は、ソースファイルが最後に変更された時刻、またはクライアントアクセス時刻のいずれかに対して相対的に設定できます。
これらのHTTPヘッダーは、ドキュメントの有効性と永続性に関するクライアントへの指示です。キャッシュされている場合、この時間が経過するまで、ドキュメントはソースからではなくキャッシュからフェッチされる可能性があります。その後、キャッシュコピーは「期限切れ」かつ無効と見なされ、ソースから新しいコピーを取得する必要があります。
max-age
以外のCache-Control
ディレクティブを変更するには(RFC 2616セクション14.9を参照)、他のサーブレットフィルタまたはApache Httpd mod_headersモジュールを使用できます。
基本的な設定例
画像、CSS、JavaScriptに「Expires
」と「Cache-Control: max-age=
」ヘッダーを追加するための基本的な構成。
<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 text/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>
代替構文
ExpiresDefault
およびExpiresByType
ディレクティブは、より読みやすい構文で定義することもできます。
<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>
ここで、<base>
は次のいずれかです。
access
now
('access
'と同等)modification
plus
キーワードは省略可能です。<num>
は整数値(Integer.parseInt()
で受け入れられる)でなければならず、<type>
は次のいずれかです。
year
、years
month
、months
week
、weeks
day
、days
hour
、hours
minute
、minutes
second
、seconds
たとえば、次のディレクティブのいずれかを使用して、デフォルトでドキュメントがアクセス後1か月で期限切れになるようにできます。
<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>
有効期限は、複数の「<num> <type>
」句を追加することで微調整できます。
<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>
変更日ベースの設定を使用する場合、ディスク上のファイルから取得されないコンテンツにはExpires
ヘッダーが追加されません。これは、このようなコンテンツには変更時刻がないためです。
有効期限ヘッダー生成の適格性
ExpiresFilter
によって強化される応答は、次の場合に適格です。
- 有効期限ヘッダーが定義されていない(
Expires
ヘッダーまたはCache-Control
ヘッダーのmax-age
ディレクティブ)、 - 応答ステータスコードがディレクティブ
ExpiresExcludedResponseStatusCodes
によって除外されていない、 - 応答の
Content-Type
がExpiresByType
ディレクティブで定義されたタイプのいずれかに一致するか、ExpiresDefault
ディレクティブが定義されている。
注:Cache-Control
ヘッダーにmax-age
以外のディレクティブが含まれている場合、ExpiresFilter
によって追加されるmax-age
ディレクティブと連結されます。
有効期限設定の選択
有効期限の構成は、次のアルゴリズムに従って選択されます。
HttpServletResponse.getContentType()
によって返される正確なコンテンツタイプ(文字セットを含む場合もあります(例: 'text/xml;charset=UTF-8
'))、HttpServletResponse.getContentType()
に文字セットが含まれている場合の文字セットを含まないコンテンツタイプ(例: 'text/xml;charset=UTF-8
' -> 'text/xml
')、HttpServletResponse.getContentType()
のメジャータイプ(例:'/
'の前にある部分文字列)(例: 'text/xml;charset=UTF-8
' -> 'text
')、ExpiresDefault
フィルタークラス名
Expiresフィルタのフィルタクラス名はorg.apache.catalina.filters.ExpiresFilter
です。
初期化パラメータ
Expiresフィルタは、次の初期化パラメータをサポートしています。
属性 | 説明 |
---|---|
ExpiresExcludedResponseStatusCodes |
このディレクティブは、 このディレクティブは、 表の下のサンプルを参照してください。 |
ExpiresByType <content-type> |
このディレクティブは、指定されたタイプのドキュメント(例: 基本時刻は、ファイルの最終変更時刻、またはクライアントによるドキュメントへのアクセス時刻のいずれかです。どちらを使用するかは 効果の違いは微妙です。
注:コンテンツタイプに文字セットが含まれている場合(例: 表の下のサンプルを参照してください。 指定されたMIMEタイプに対してのみ、 このドキュメントの前半で説明されている代替構文を使用して、有効期限の計算を指定することもできます。 |
ExpiresDefault |
このディレクティブは、影響を受けるレルム内のすべてのドキュメントの有効期限計算のデフォルトアルゴリズムを設定します。 |
サンプル:応答ステータスコード302、500、および503を除外します。
<init-param>
<param-name>ExpiresExcludedResponseStatusCodes</param-name>
<param-value>302, 500, 503</param-value>
</init-param>
ExpiresByType初期化パラメータのサンプル。
<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>
トラブルシューティング
トラブルシューティングするには、org.apache.catalina.filters.ExpiresFilter
でログを有効にします。
logging.propertiesの抜粋。
org.apache.catalina.filters.ExpiresFilter.level = FINE
初期化ログメッセージのサンプル。
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]]}]
ExpiresFilter
が有効期限を追加する1リクエストあたりのログメッセージのサンプルを以下に示します。メッセージは1行に記述されており、可読性を高めるためにここに折り返されています。
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
ExpiresFilter
が有効期限を追加しない1リクエストあたりのログメッセージのサンプル。
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
失敗したリクエストフィルター
はじめに
このフィルタは、リクエストにおけるパラメータの解析をトリガーし、解析エラーやリクエストサイズ制限(ConnectorのmaxParameterCount
属性など)によってパラメータ解析中にパラメータがスキップされた場合、リクエストを拒否します。このフィルタは、クライアントによって送信されたパラメータ値が失われないようにするために使用できます。
パラメータの解析はHTTPリクエストのボディを消費する場合があるため、このフィルタによって保護されているサーブレットがrequest.getInputStream()
またはrequest.getReader()
呼び出しを使用する場合は注意が必要です。一般的に、このフィルタを追加することによってWebアプリケーションが壊れるリスクはそれほど高くありません。なぜなら、パラメータの解析はリクエストボディを消費する前にリクエストのコンテンツタイプをチェックするからです。
POSTリクエストが正しく解析されるためには、このフィルタの上にSetCharacterEncodingFilter
フィルタを設定する必要があります。詳細はFAQのCharacterEncodingページを参照してください。
リクエストはHTTPステータスコード400(Bad Request)で拒否されます。
フィルタークラス名
Failed Request Filterのフィルタクラス名はorg.apache.catalina.filters.FailedRequestFilter
です。
初期化パラメータ
Failed Request Filterは初期化パラメータをサポートしていません。
HTTPヘッダーセキュリティフィルター
はじめに
接続のセキュリティを向上させるために、レスポンスに追加できるHTTPヘッダがいくつかあります。このフィルタは、これらのヘッダを追加するためのメカニズムを提供します。CORSなど、より複雑な要件を持つセキュリティ関連のヘッダは、個別のフィルタとして実装されていることに注意してください。
フィルタークラス名
HTTP Header Security Filterのフィルタクラス名はorg.apache.catalina.filters.HttpHeaderSecurityFilter
です。
初期化パラメータ
HTTP Header Security Filterは、次の初期化パラメータをサポートしています。
属性 | 説明 |
---|---|
hstsEnabled |
セキュアなリクエストに対して、HTTP Strict Transport Security (HSTS)ヘッダ( |
hstsMaxAgeSeconds |
HSTSヘッダで使用される最大有効期間(秒単位)を指定します。負の値は0として扱われます。指定しない場合、デフォルト値の |
hstsIncludeSubDomains |
HSTSヘッダにincludeSubDomainsパラメータを含めるかどうかを指定します。指定しない場合、デフォルト値の |
hstsPreload |
HSTSヘッダにpreloadパラメータを含めるかどうかを指定します。指定しない場合、デフォルト値の |
antiClickJackingEnabled |
クリックジャッキング対策ヘッダ( |
antiClickJackingOption |
クリックジャッキング対策ヘッダに使用する値を指定します。 |
antiClickJackingUri |
antiClickJackingOptionに |
blockContentTypeSniffingEnabled |
コンテンツタイプスニッフィングをブロックするヘッダ( |
xssProtectionEnabled |
注:この設定は非推奨です。すべての主要ブラウザでHTTPヘッダのサポートが削除されたためです。Tomcat 11.0.x以降では設定が削除されました。 ブラウザのクロスサイトスクリプティングフィルタ保護を有効にするヘッダ( |
レート制限フィルター
はじめに
Rate Limit Filterは、時間枠(タイムバケットとも呼ばれます)内、例えば60秒間に300リクエストというように、単一のIPアドレスから許可されるリクエスト数を制限することで、サービス拒否(DoS)攻撃やブルートフォース攻撃を軽減するのに役立ちます。
このフィルタは、各IPアドレスについてタイムバケット内のカウンタを増分することで機能します。カウンタが許容限度を超えた場合、そのIPからのさらなるリクエストは、バケット時間が終了して新しいバケットが開始されるまで、「429 Too many requests」レスポンスでドロップされます。
このフィルタは効率性と低オーバーヘッドのために最適化されているため、いくつかの設定値をより効率的な値に変換します。例えば、60秒のタイムバケットの設定は65.536秒に変換されます。これにより、ビットシフト演算を使用して非常に高速なバケット計算が可能になります。ユーザーの意図を忠実に反映するために、設定されたリクエスト数は同じ比率で乗算されます。そのため、60秒間に100リクエストの設定は、実際には65秒間に109リクエストになります。
異なるURIに対して異なる制限を設定するのが一般的です。例えば、ログインページや認証スクリプトは通常、アプリケーションの残りの部分よりもはるかに少ないリクエスト数しか予想されません。そのため、15秒間に5リクエストのみを許可するフィルタ定義を追加し、それらのURIにマッピングすることができます。
許可された制限を超えるリクエストの終了を無効にするには、enforce
をfalse
に設定できます。その後、アプリケーションコードはリクエスト属性org.apache.catalina.filters.RateLimitFilter.Count
を検査し、他の情報に基づいてリクエストの処理方法を決定できます(例えば、ロールに基づいて特定のユーザーへのリクエストをさらに許可するなど)。
警告:Tomcatがリバースプロキシの背後にある場合、Rate Limit FilterがクライアントのIPアドレスを参照していることを確認する必要があります。例えば、Remote IP Filterを使用している場合、Rate Limit FilterのフィルタマッピングはRemote IP Filterのマッピングの後にくるようにする必要があります。これにより、各リクエストのIPアドレスが解決された後、Rate Limit Filterが適用されます。そうしないと、異なるIPからのリクエストが同じバケットでカウントされ、自己流のDoS攻撃につながります。
フィルタークラス名
Remote Address Filterのフィルタクラス名はorg.apache.catalina.filters.RateLimitFilter
です。
初期化パラメータ
Rate Limit Filterは、次の初期化パラメータをサポートしています。
属性 | 説明 |
---|---|
bucketDuration |
タイムバケットの時間(秒単位)を指定します。デフォルトは |
bucketRequests |
タイムバケットで許可されるリクエスト数を指定します。デフォルトは |
enforce |
時間枠で許可される最大数を超えてもリクエストを許可するにはfalseに設定します。アプリケーションコードは、リクエスト属性org.apache.catalina.filters.RateLimitFilter.Countを検査して、時間枠内でそのIPから行われたリクエストの数を取得できます。デフォルトは |
statusCode |
リクエストがドロップされたときに返すステータスコードを指定します。デフォルトは |
statusMessage |
リクエストがドロップされたときに返すステータスメッセージを指定します。デフォルトは「Too many requests」です。 |
例
サイトのレート制限を1分間に300リクエストに設定します(デフォルト)。
<filter>
<filter-name>RateLimitFilter Global</filter-name>
<filter-class>org.apache.catalina.filters.RateLimitFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>RateLimitFilter Global</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
/auth/*スクリプトのレート制限を1分間に20リクエストに設定します。
<filter>
<filter-name>RateLimitFilter Login</filter-name>
<filter-class>org.apache.catalina.filters.RateLimitFilter</filter-class>
<init-param>
<param-name>bucketRequests</param-name>
<param-value>20</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>RateLimitFilter Login</filter-name>
<url-pattern>/auth/*</url-pattern>
</filter-mapping>
リモートアドレスフィルター
はじめに
Remote Address Filterを使用すると、このリクエストを送信したクライアントのIPアドレスを1つ以上の正規表現と比較し、リクエストを継続的に許可するか、このクライアントからのリクエストの処理を拒否するかを選択できます。
正規表現の構文は、「標準」ワイルドカードマッチングとは異なります。Tomcatはjava.util.regex
パッケージを使用します。サポートされている式の詳細については、Javaのドキュメントを参照してください。
注:IPv6アドレスでこのフィルタを使用する場合、注意点があります。このバルブが処理するIPアドレスの形式は、取得に使用されたAPIによって異なります。Inet6Addressクラスを使用してJavaソケットからアドレスを取得した場合、その形式はx:x:x:x:x:x:x:x
になります。つまり、localhostのIPアドレスは、より広く使用されている::1
ではなく0:0:0:0:0:0:0:1
になります。実際の値については、アクセスログを参照してください。
こちらも参照してください:Remote Host Filter.
フィルタークラス名
Remote Address Filterのフィルタクラス名はorg.apache.catalina.filters.RemoteAddrFilter
です。
初期化パラメータ
Remote Address Filterは、次の初期化パラメータをサポートしています。
属性 | 説明 |
---|---|
allow |
リモートクライアントのIPアドレスと比較される正規表現( |
deny |
リモートクライアントのIPアドレスと比較される正規表現( |
denyStatus |
拒否されたリクエストを拒否するときに使用されるHTTPレスポンスステータスコード。デフォルト値は |
例
localhostから接続するクライアントのみアクセスを許可するには
<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>
リモートホストフィルター
はじめに
Remote Host Filterを使用すると、このリクエストを送信したクライアントのホスト名を1つ以上の正規表現と比較し、リクエストを継続的に許可するか、このクライアントからのリクエストの処理を拒否するかを選択できます。
正規表現の構文は、「標準」ワイルドカードマッチングとは異なります。Tomcatはjava.util.regex
パッケージを使用します。サポートされている式の詳細については、Javaのドキュメントを参照してください。
注:このフィルタは、ServletRequest.getRemoteHost()
メソッドによって返される値を処理します。このメソッドが適切なホスト名を返すようにするには、Connectorで「DNSルックアップ」機能を有効にする必要があります。
こちらも参照してください:Remote Address Filter、HTTP Connectorの設定。
フィルタークラス名
Remote Address Filterのフィルタクラス名はorg.apache.catalina.filters.RemoteHostFilter
です。
初期化パラメータ
Remote Host Filterは、次の初期化パラメータをサポートしています。
属性 | 説明 |
---|---|
allow |
リモートクライアントのホスト名と比較される正規表現( |
deny |
リモートクライアントのホスト名と比較される正規表現( |
denyStatus |
拒否されたリクエストを拒否するときに使用されるHTTPレスポンスステータスコード。デフォルト値は |
リモートCIDRフィルター
はじめに
リモートCIDRフィルタを使用すると、このリクエストを送信したクライアントのIPアドレスをCIDR表記に従う1つ以上のネットマスクと比較し、リクエストの続行を許可するか、このクライアントからのリクエストの処理を拒否することができます。IPv4とIPv6の両方が完全にサポートされています。
このフィルタは、Apache httpdのOrder
、Allow from
、Deny from
ディレクティブを模倣していますが、以下の制限があります。
Order
は常にallow, deny
になります。- ネットマスクのドット付きクォード表記はサポートされていません(つまり、
192.168.1.0/255.255.255.0
と書くことはできず、192.168.1.0/24
と書く必要があります)。 10.10.
のように、10.10.0.0/16
と同等のショートカットはサポートされていません。- フィルタ名にもあるように、これはCIDRのみのフィルタであるため、
.mydomain.com
のようなサブドメイン表記もサポートされていません。
このフィルタのその他の機能は次のとおりです。
- CIDRプレフィックスを省略すると、このフィルタは単一のIPフィルタになります。
- リモートホストフィルタとは異なり、IPv6アドレスを簡略化された形式(
::1
、fe80::/71
など)で処理できます。
フィルタークラス名
リモートアドレスフィルタのフィルタクラス名はorg.apache.catalina.filters.RemoteCIDRFilter
です。
初期化パラメータ
リモートCIDRフィルタは、以下の初期化パラメータをサポートしています。
属性 | 説明 |
---|---|
allow |
リモートクライアントのIPアドレスと照合される、IPv4またはIPv6のネットマスクまたはアドレスのカンマ区切りリスト。この属性が指定されている場合、このリクエストを受け入れるには、リモートアドレスが一致する必要があります。この属性が指定されていない場合、 |
deny |
リモートクライアントのIPアドレスと照合される、IPv4またはIPv6のネットマスクまたはアドレスのカンマ区切りリスト。この属性が指定されている場合、このリクエストを受け入れるには、リモートアドレスが一致してはなりません。この属性が指定されていない場合、リクエストの受理は |
例
localhostとローカルネットワーク192.68.0.*からのクライアントからのアクセスのみを許可するには、以下のようにします。
<filter>
<filter-name>Remote CIDR Filter</filter-name>
<filter-class>org.apache.catalina.filters.RemoteCIDRFilter</filter-class>
<init-param>
<param-name>allow</param-name>
<param-value>127.0.0.1, ::1, 192.68.0.0/24</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Remote CIDR Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
リモートIPフィルター
はじめに
Tomcat port of mod_remoteip、このフィルタは、リクエストのクライアントの実際のIPアドレスとホスト名を、プロキシまたはロードバランサによってリクエストヘッダ(例:「X-Forwarded-For」)を介して提示されたIPアドレスリストに置き換えます。
このフィルタのもう1つの機能は、リクエストヘッダ(例:「X-Forwarded-Proto」)を介してプロキシまたはロードバランサによって提示されたスキームを使用して、実際のスキーム(http/https)、サーバポート、request.secure
を置き換えることです。
リモートアドレス/ホストフィルタと併用する場合、正しいクライアントIPアドレスがリモートアドレス/ホストフィルタに提示されるように、このフィルタを最初に定義する必要があります。
注:デフォルトでは、このフィルタはアクセスログに書き込まれる値に影響を与えません。リクエスト処理がフィルタから抜けると元の値が復元され、それは常にアクセスログ記録よりも前に発生します。このフィルタによって設定されたリモートアドレス、リモートホスト、サーバポート、プロトコルの値をアクセスログに渡すには、それらをリクエスト属性に配置します。これらの値の公開はデフォルトで有効になっていますが、AccessLogValve
で明示的にそれらを使用するように構成する必要があります。AccessLogValve
のrequestAttributesEnabled
属性に関するドキュメントを参照してください。
このフィルタによって設定され、アクセスログで使用できるリクエスト属性の名前は次のとおりです。
org.apache.catalina.AccessLog.RemoteAddr
org.apache.catalina.AccessLog.RemoteHost
org.apache.catalina.AccessLog.Protocol
org.apache.catalina.AccessLog.ServerPort
org.apache.tomcat.remoteAddr
フィルタークラス名
リモートIPフィルタのフィルタクラス名はorg.apache.catalina.filters.RemoteIpFilter
です。
'x-forwarded-for'を処理するための基本的な設定
フィルタはx-forwarded-for
HTTPヘッダーを処理します。
<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>
'x-forwarded-for'と'x-forwarded-proto'を処理するための基本的な設定
フィルタはx-forwarded-for
とx-forwarded-proto
HTTPヘッダーを処理します。SSL接続の場合、x-forwarded-proto
ヘッダーの期待値はhttps
(大文字と小文字の区別なし)です。
<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>
内部プロキシを使用した高度な設定
RemoteIpFilter設定
<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>
リクエスト値
プロパティ | RemoteIpFilter適用前 | RemoteIpFilter適用後 |
---|---|---|
request.remoteAddr | 192.168.0.10 | 140.211.11.130 |
request.header[ 'x-forwarded-for'] |
140.211.11.130, 192.168.0.10 | null |
request.header[ 'x-forwarded-by'] |
null | null |
request.header[ 'x-forwarded-proto'] |
https | https |
request.scheme | http | https |
request.secure | false | true |
request.serverPort | 80 | 443 |
注:リクエストが通過したプロキシは内部プロキシのみであるため、x-forwarded-by
ヘッダーはnull
です。すべてのプロキシが信頼されているか内部プロキシであるため、x-forwarded-for
はnull
です。
信頼できるプロキシを使用した高度な設定
RemoteIpFilter設定
<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>
リクエスト値
プロパティ | RemoteIpFilter適用前 | RemoteIpFilter適用後 |
---|---|---|
request.remoteAddr | 192.168.0.10 | 140.211.11.130 |
request.header[ 'x-forwarded-for'] |
140.211.11.130, proxy1, proxy2 | null |
request.header[ 'x-forwarded-by'] |
null | proxy1, proxy2 |
注:proxy1
とproxy2
はどちらも、x-forwarded-for
ヘッダーに含まれる信頼できるプロキシであり、両方ともx-forwarded-by
ヘッダーに移行されます。すべてのプロキシが信頼されているか内部プロキシであるため、x-forwarded-for
はnull
です。
内部プロキシと信頼できるプロキシを使用した高度な設定
RemoteIpFilter設定
<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>
リクエスト値
プロパティ | RemoteIpFilter適用前 | RemoteIpFilter適用後 |
---|---|---|
request.remoteAddr | 192.168.0.10 | 140.211.11.130 |
request.header[ 'x-forwarded-for'] |
140.211.11.130, proxy1, proxy2, 192.168.0.10 | null |
request.header[ 'x-forwarded-by'] |
null | proxy1, proxy2 |
注:proxy1
とproxy2
はどちらも、x-forwarded-for
ヘッダーに含まれる信頼できるプロキシであり、両方ともx-forwarded-by
ヘッダーに移行されます。192.168.0.10
は内部プロキシであるため、x-forwarded-by
には表示されません。すべてのプロキシが信頼されているか内部プロキシであるため、x-forwarded-for
はnull
です。
信頼できないプロキシを使用した高度な設定
RemoteIpFilter設定
<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>
リクエスト値
プロパティ | RemoteIpFilter適用前 | RemoteIpFilter適用後 |
---|---|---|
request.remoteAddr | 192.168.0.10 | untrusted-proxy |
request.header[ 'x-forwarded-for'] |
140.211.11.130, untrusted-proxy, proxy1 | 140.211.11.130 |
request.header[ 'x-forwarded-by'] |
null | proxy1 |
注:x-forwarded-by
には、信頼できるプロキシproxy1
が含まれています。untrusted-proxy
は信頼されていないため、untrusted-proxy
が実際のリモートIPであると信頼することはできません。そのため、x-forwarded-by
には140.211.11.130
が含まれています。request.remoteAddr
は、proxy1
によって検証されたIPであるuntrusted-proxy
です。
初期化パラメータ
リモートIPフィルタは、以下の初期化パラメータをサポートしています。
属性 | 説明 |
---|---|
enableLookups |
|
remoteIpHeader |
リクエスト元クライアントから始まる、通過したIPアドレスのリストを保持する、このバルブによって読み取られるHTTPヘッダーの名前。指定しない場合、デフォルトの |
internalProxies |
プロキシのIPアドレスが内部プロキシと見なされるために一致する必要がある正規表現( |
proxiesHeader |
このバルブによって作成され、受信remoteIpHeaderで処理されたプロキシのリストを保持するHTTPヘッダーの名前。指定しない場合、デフォルトの |
requestAttributesEnabled |
AccessLog実装で使用されるリクエスト属性を設定して、リモートアドレス、リモートホスト、サーバーポート、プロトコルに関するリクエストからの値をオーバーライドするには、 |
trustedProxies |
プロキシのIPアドレスが信頼できるプロキシと見なされるために一致する必要がある正規表現( |
protocolHeader |
クライアントがプロキシに接続するために使用したプロトコルを保持する、このバルブによって読み取られるHTTPヘッダーの名前。指定しない場合、デフォルトの |
hostHeader |
クライアントがプロキシに接続するために使用したホストを保持する、このバルブによって読み取られるHTTPヘッダーの名前。指定しない場合、デフォルトの |
portHeader |
クライアントがプロキシに接続するために使用したポートを保持する、このバルブによって読み取られるHTTPヘッダーの名前。指定しない場合、デフォルトの |
protocolHeaderHttpsValue |
HTTPSリクエストであることを示すprotocolHeaderの値。指定しない場合、デフォルトの |
httpServerPort |
protocolHeaderが |
httpsServerPort |
protocolHeaderが |
changeLocalName |
|
changeLocalPort |
|
リクエストダンプフィルター
はじめに
リクエストダンプフィルタは、リクエストとレスポンスオブジェクトからの情報をログに記録し、デバッグ目的で使用することを目的としています。このフィルタを使用する場合は、org.apache.catalina.filter.RequestDumperFilter
ロガーを専用のファイルに送信し、org.apache.juli.VerbatimFormatter
を使用することをお勧めします。
警告:このフィルタを使用すると副作用が発生します。このフィルタからの出力には、リクエストに含まれるパラメータが含まれます。パラメータはデフォルトのプラットフォームエンコーディングを使用してデコードされます。Webアプリケーション内のrequest.setCharacterEncoding()
への後続の呼び出しは、効果がありません。
フィルタークラス名
リクエストダンプフィルタのフィルタクラス名はorg.apache.catalina.filters.RequestDumperFilter
です。
初期化パラメータ
リクエストダンプフィルタは、初期化パラメータをサポートしていません。
設定例
Webアプリケーションのweb.xml内の次のエントリは、そのWebアプリケーションのすべてのリクエストに対してリクエストダンプフィルタを有効にします。エントリがCATALINA_BASE/conf/web.xml
に追加された場合、リクエストダンプフィルタはすべてのWebアプリケーションで有効になります。
<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>
CATALINA_BASE/conf/logging.properties 内の以下のエントリにより、Request Dumper Filter の出力を個別のログファイルに書き込むことができます。
# 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.encoding = UTF-8
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
セッションイニシャライザフィルター
はじめに
Session Initializer Filter は、リクエストの処理前にjakarta.servlet.http.HttpSession
を初期化します。これは、Handshake フェーズでHttpSession
が必要な場合、JSR-356 準拠の WebSocket 実装に必要です。
WebSocket 用 Java API では、リクエスト時にHttpSession
が初期化されることは必須ではなく、そのためHttpSession
が事前に初期化されていない場合、jakarta.servlet.http.HttpServletRequest
のgetSession()
はnull
を返します。
このフィルタは、そのurl-pattern
に一致する任意のHttpServletRequest
に対して HttpSession を初期化することで、この問題を解決します。
フィルタークラス名
Session Initializer Filter のフィルタクラス名は、org.apache.catalina.filters.SessionInitializerFilter
です。
初期化パラメータ
Session Initializer Filter は、初期化パラメータをサポートしていません。
設定例
Webアプリケーション配置記述子(web.xml)内の以下のエントリにより、指定されたURLパターン(この例では "/ws/*")に一致するリクエストに対して Session Initializer Filter を有効にすることができます。
<filter>
<filter-name>SessionInitializer</filter-name>
<filter-class>org.apache.catalina.filters.SessionInitializerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SessionInitializer</filter-name>
<url-pattern>/ws/*</url-pattern>
</filter-mapping>
文字エンコーディング設定フィルター
はじめに
ユーザーエージェントは、リクエストに文字エンコーディング情報を必ずしも含んでいません。リクエストの処理方法によっては、通常、デフォルトエンコーディングとして ISO-8859-1 が使用されます。これは常に望ましいわけではありません。このフィルタは、そのエンコーディングの設定、または特定の値への強制を可能にするオプションを提供します。基本的に、このフィルタはServletRequest.setCharacterEncoding()
メソッドを呼び出します。
このフィルタによって設定された値は、このフィルタの後でパラメータの解析が行われる場合、POST リクエストのパラメータ解析で使用されます。したがって、フィルタマッピングの順序が重要です。GET リクエストのエンコーディングはここで設定されず、コネクタで設定されることに注意してください。詳細は、FAQ の CharacterEncoding のページを参照してください。
フィルタークラス名
Set Character Encoding Filter のフィルタクラス名は、org.apache.catalina.filters.SetCharacterEncodingFilter
です。
初期化パラメータ
Set Character Encoding Filter は、以下の初期化パラメータをサポートします。
属性 | 説明 |
---|---|
encoding |
設定する文字エンコーディングの名前。 |
ignore |
ユーザーエージェントによって指定された文字エンコーディングを無視するかどうかを決定します。この属性が |
WebDAV修正フィルター
はじめに
Microsoft オペレーティングシステムには、2 つの WebDAV クライアントがあります。1 つはポート 80 で使用され、もう 1 つはその他のすべてのポートで使用されます。ポート 80 で使用される実装は WebDAV 仕様に準拠しておらず、Tomcat WebDAV Servlet との通信を試行すると失敗します。このフィルタは、ポート 80 を介して接続する場合でも、機能する WebDAV 実装の使用を強制することで、この問題に対する修正を提供します。
フィルタークラス名
WebDAV Fix Filter のフィルタクラス名は、org.apache.catalina.filters.WebdavFixFilter
です。
初期化パラメータ
WebDAV Fix Filter は、初期化パラメータをサポートしていません。