Valve コンポーネント
目次
はじめに
Valve要素は、関連付けられたCatalinaコンテナ(エンジン、ホスト、またはコンテキスト)の リクエスト処理パイプラインに挿入されるコンポーネントを表します。個々のValveは、それぞれ異なる処理機能を持っており、以下に個別に説明します。
以下の説明では、変数名$CATALINA_BASEを使用して、ほとんどの相対パスが解決される基準ディレクトリを参照します。 $CATALINA_BASEディレクトリを設定してTomcatを複数のインスタンス用に設定していない場合、$CATALINA_BASEはTomcatをインストールしたディレクトリである$CATALINA_HOMEの値に設定されます。
アクセスログ
アクセスログは、org.apache.catalina.AccessLogインターフェースを実装するvalveによって実行されます。
アクセスログ Valve
はじめに
アクセスログ Valveは、標準Webサーバーによって作成されるログファイルと同じ形式でログファイルを作成します。これらのログは、後で標準ログ分析ツールによって分析され、ページヒット数、ユーザセッションアクティビティなどを追跡できます。このValve
は、ログファイルを書き込むための自己完結型のロジックを使用しており、ログファイルは毎日深夜に自動的に切り替えられます。(アクセスログの必須要件は、低オーバーヘッドで大量の連続データストリームを処理することです。このValve
はApache Commons Loggingを使用しないため、追加のオーバーヘッドと潜在的に複雑な設定を回避できます)。
このValve
は、任意のCatalinaコンテナ(Context
、Host
、またはEngine
)に関連付けることができ、そのコンテナによって処理されるすべての要求を記録します。
一部のリクエストは、コンテナに渡される前にTomcatによって処理される場合があります。これらには、/fooから/foo/へのリダイレクトや無効なリクエストの拒否が含まれます。Tomcatがリクエストを処理したであろうContext
を識別できる場合、リクエスト/レスポンスは、関連付けられたContext
、Host
、およびEngine
のAccessLog
に記録されます。 Tomcatがリクエストを処理したであろうContext
を識別できない場合(URLが無効な場合など)、Tomcatは最初にEngine
、次にEngine
のデフォルトHost
、最後にデフォルトHost
のROOT(またはデフォルト)Context
でAccessLog
実装を探します。 Tomcatは見つかった最初のAccessLog
実装を使用して、コンテナに渡される前に拒否されたリクエストをログに記録します。
出力ファイルは、directory
属性で指定されたディレクトリに配置されます。ファイルの名前は、設定されたprefix
、タイムスタンプ、およびsuffix
を連結して構成されます。ファイル名に含まれるタイムスタンプの形式は、fileDateFormat
属性を使用して設定できます。 rotatable
をfalse
に設定してファイルのローテーションをオフにすると、このタイムスタンプは省略されます。
警告:複数のAccessLogValveインスタンスを使用する場合は、異なる出力ファイルを使用するように設定する必要があります。
sendfileが使用される場合、レスポンスバイトは別のスレッドで非同期に書き込まれ、アクセスログvalveは実際に書き込まれたバイト数を認識しません。この場合、書き込みのためにsendfileスレッドに渡されたバイト数がアクセスログvalveに記録されます。
属性
アクセスログ Valveは、以下の設定属性をサポートしています。
属性 | 説明 |
---|---|
buffered |
ロギングをバッファリングするかどうかを決定するフラグ。 |
className |
使用する実装のJavaクラス名。 デフォルトのアクセスログvalveを使用するには、これをorg.apache.catalina.valves.AccessLogValveに設定する必要があります。 |
condition |
|
conditionIf |
条件付きロギングをオンにします。設定されている場合、 |
conditionUnless |
条件付きロギングをオンにします。設定されている場合、 |
directory |
このvalveによって作成されたログファイルが配置されるディレクトリの絶対パスまたは相対パス名。相対パスが指定されている場合、$CATALINA_BASEからの相対パスとして解釈されます。 directory属性が指定されていない場合、デフォルト値は「logs」($CATALINA_BASEからの相対パス)です。 |
encoding |
ログファイルの書き込みに使用される文字セット。空の文字列は、デフォルトの文字セットを使用することを意味します。 デフォルト値:UTF-8。 |
fileDateFormat |
アクセスログファイル名でカスタマイズされたタイムスタンプを使用できます。フォーマットされたタイムスタンプが変更されるたびに、ファイルはローテーションされます。デフォルト値は |
ipv6Canonical |
IPv6アドレスをRFC 5952で定義されている標準表現形式で表すかどうかを決定するフラグ。 |
locale |
アクセスログ行のタイムスタンプのフォーマットに使用されるロケール。明示的なSimpleDateFormatパターン( |
maxDays |
ローテーションされたアクセスログが削除されるまで保持される最大日数。指定しない場合、デフォルト値の`-1`が使用されます。これは、古いファイルを削除しないことを意味します。 |
maxLogMessageBufferSize |
ログメッセージバッファは通常リサイクルされ、再利用されます。過剰なメモリ使用を防ぐために、バッファがこのサイズを超えて増加した場合、バッファは破棄されます。デフォルトは256文字です。これは、一般的なアクセスログメッセージサイズよりも大きく設定する必要があります。 |
pattern |
リクエストとレスポンスからログに記録されるさまざまな情報フィールドを識別するフォーマットレイアウト、または標準フォーマットを選択するための単語`common`または`combined`。この属性の設定の詳細については、以下を参照してください。 |
prefix |
各ログファイルの名前の先頭に追加されるプレフィックス。指定しない場合、デフォルト値は「access_log」です。 |
renameOnRotate |
デフォルトでは、ローテーション可能なログの場合、アクティブなアクセスログファイル名には`fileDateFormat`の現在のタイムスタンプが含まれます。ローテーション中、ファイルは閉じられ、名前に次のタイムスタンプが付いた新しいファイルが作成されて使用されます。 `renameOnRotate`を`true`に設定すると、タイムスタンプはアクティブなログファイル名の一部ではなくなります。ローテーション中にのみファイルが閉じられ、タイムスタンプを含むように名前が変更されます。これは、時間ベースのローテーションを行う場合のほとんどのログフレームワークの動作と似ています。 デフォルト値:`false` |
requestAttributesEnabled |
リモートアドレス、リモートホスト、サーバーポート、およびプロトコルについてリクエストによって返される値をオーバーライドするために使用されるリクエスト属性(通常はRemoteIpValveなどによって設定される)の存在を確認するには、`true`に設定します。属性が設定されていないか、この属性が`false`に設定されている場合、リクエストからの値が使用されます。設定しない場合、デフォルト値の`false`が使用されます。 |
resolveHosts |
この属性は、もはやサポートされていません。代わりに、コネクタ属性`enableLookups`を使用してください。 コネクタで |
rotatable(ローテーション可能) |
ログのローテーションを行うかどうかを決定するフラグ。 |
suffix(接尾辞) |
各ログファイル名の末尾に追加される接尾辞。指定しない場合、デフォルト値は ""(長さゼロの文字列)で、接尾辞は追加されません。 |
pattern
属性の値は、リテラルテキスト文字列と、"%"文字で始まるパターン識別子を組み合わせて構成されます。パターン識別子は、現在のリクエストとレスポンスから対応する変数値に置き換えられます。以下のパターンコードがサポートされています。
%a
- リモートIPアドレス。以下の%{xxx}a
も参照してください。%A
- ローカルIPアドレス%b
- HTTPヘッダーを除く送信バイト数。ゼロの場合は'-'となります。%B
- HTTPヘッダーを除く送信バイト数%D
- リクエストの処理にかかった時間(マイクロ秒)%F
- レスポンスのコミットにかかった時間(ミリ秒)%h
- リモートホスト名(コネクタのenableLookups
がfalseの場合はIPアドレス)%H
- リクエストプロトコル%I
- 現在のリクエストスレッド名(後でスタックトレースと比較可能)%l
- identdからのリモート論理ユーザー名(常に'-'を返します)%m
- リクエストメソッド(GET、POSTなど)%p
- このリクエストを受信したローカルポート。以下の%{xxx}p
も参照してください。%q
- クエリ文字列(存在する場合は'?'が前に付きます)%r
- リクエストの最初の行(メソッドとリクエストURI)%s
- レスポンスのHTTPステータスコード%S
- ユーザーセッションID%t
- 日付と時刻(共通ログフォーマット)%T
- リクエストの処理にかかった時間(秒)%u
- 認証されたリモートユーザー(存在する場合)。そうでない場合は'-'(必要に応じてエスケープされます)%U
- リクエストされたURLパス%v
- ローカルサーバー名%X
- レスポンス完了時の接続ステータスX
= レスポンス完了前に接続が中断されました。+
= レスポンス送信後も接続が維持される可能性があります。-
= レスポンス送信後に接続が閉じられます。
受信または送信ヘッダー、Cookie、セッションまたはリクエスト属性、特別なタイムスタンプ形式に関する情報を書き込むこともできます。Apache HTTP Serverのログ設定構文をモデルにしています。それぞれ異なるxxx
キーで複数回使用できます。
%{xxx}a
リモートアドレス(クライアント)(xxx==remote
)または接続ピアアドレス(xxx=peer
)を書き込みます。%{xxx}i
名前がxxx
の受信ヘッダーの値を書き込みます(必要に応じてエスケープされます)。%{xxx}o
名前がxxx
の送信ヘッダーの値を書き込みます(必要に応じてエスケープされます)。%{xxx}c
名前がxxx
のCookieの値を書き込みます(コンマ区切りで、必要に応じてエスケープされます)。%{xxx}r
名前がxxx
のServletRequest属性の値を書き込みます(必要に応じてエスケープされ、リクエストがnullの場合は値??
)。%{xxx}s
名前がxxx
のHttpSession属性の値を書き込みます(必要に応じてエスケープされ、リクエストがnullの場合は値??
)。%{xxx}p
ローカル(サーバー)ポート(xxx==local
)またはリモート(クライアント)ポート(xxx=remote
)を書き込みます。%{xxx}t
拡張SimpleDateFormatパターンxxx
を使用してフォーマットされたリクエストの終了時のタイムスタンプを書き込みます。%{xxx}T
単位xxx
を使用してリクエストの処理にかかった時間を書き込みます。有効な単位は、ミリ秒の場合はms
、マイクロ秒の場合はus
、秒の場合はs
です。%{s}T
は%T
と同等であり、%{us}T
は%D
と同等です。
SimpleDateFormatでサポートされているすべての形式は、%{xxx}t
で使用できます。さらに、以下の拡張機能が追加されました。
sec
- エポックからの秒数msec
- エポックからのミリ秒数msec_frac
- ミリ秒の端数
これらの形式は、同じ形式トークン内でSimpleDateFormat形式と混在させることはできません。
さらに、リクエスト開始時刻またはレスポンス終了時刻のどちらのタイムスタンプを記録するかを定義できます。
begin
またはプレフィックスbegin:
は、リクエスト開始時刻を選択します。end
またはプレフィックスend:
は、レスポンス終了時刻を選択します。
パターンに複数の%{xxx}t
トークンを追加することにより、両方のタイムスタンプを記録することもできます。
エスケープは次のように適用されます。
"
は\"
としてエスケープされます。\
は\\
としてエスケープされます。\f
、\n
、\r
、\t
には、標準のCエスケープが使用されます。- その他の制御文字またはコードポイントが127を超える文字は、標準のJavaユニコードエスケープ(
\uXXXX
)を使用してエンコードされます。
省略形パターンpattern="common"
は、 **'%h %l %u %t "%r" %s %b'** で定義された共通ログフォーマットに対応します。
省略形パターンpattern="combined"
は、Referer
ヘッダーとUser-Agent
ヘッダーの値をそれぞれ二重引用符で囲んでcommon
パターンに追加します。
不明なパターン識別子を使用しているフィールドは、???X???
としてログに記録されます。ここで、X
は不明な識別子です。不明なパターン識別子と{xxx}
キーを持つフィールドは、???
としてログに記録されます。
Tomcatがリバースプロキシの背後で動作している場合、アクセスログバルブによって記録されるクライアント情報は、Tomcatとリバースプロキシの構成に応じて、リバースプロキシ、ブラウザ、またはその両方の組み合わせを表す場合があります。Tomcatの構成オプションについては、プロキシサポートおよびプロキシハウツーを参照してください。mod_jkを使用するリバースプロキシについては、汎用プロキシのドキュメントを参照してください。その他のリバースプロキシについては、それぞれのドキュメントを参照してください。
拡張アクセスログ Valve
はじめに
**拡張アクセスログバルブ**は、アクセスログバルブクラスを拡張するため、同じ自己完結型のロギングロジックを使用します。これは、同じファイル処理属性の多くを実装していることを意味します。標準のAccessLogValve
との主な違いは、ExtendedAccessLogValve
がW3Cで定義されている拡張ログファイル形式のワーキングドラフトに準拠したログファイルを作成することです。
属性
**拡張アクセスログバルブ**は、標準のアクセスログバルブのすべての構成属性をサポートします。className
とpattern
に使用される値のみが異なります。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。拡張アクセスログバルブを使用するには、これを**org.apache.catalina.valves.ExtendedAccessLogValve**に設定する必要があります。 |
pattern |
リクエストとレスポンスからログに記録されるさまざまな情報フィールドを識別するフォーマットレイアウト。この属性の構成の詳細については、以下を参照してください。 |
pattern
属性の値は、フォーマットトークンで構成されます。一部のトークンには、追加のプレフィックスが必要です。プレフィックスには、"client"の場合はc
、"server"の場合はs
、"client to server"の場合はcs
、"server to client"の場合はsc
、"application specific"の場合はx
があります。さらに、一部のトークンは追加のセレクタによって補完されます。フォーマットの詳細については、W3C仕様を参照してください。
以下のフォーマットトークンがサポートされています。
- bytes - HTTPヘッダーを除く送信バイト数。ゼロの場合は'-'となります。
- c-dns - リモートホスト名(コネクタの
enableLookups
がfalseの場合はIPアドレス) - c-ip - リモートIPアドレス
- cs-method - リクエストメソッド(GET、POSTなど)
- cs-uri - リクエストURI
- cs-uri-query - クエリ文字列(存在する場合は'?'が前に付きます)
- cs-uri-stem - リクエストされたURLパス
- date - GMTのyyyy-mm-dd形式の日付
- s-dns - ローカルホスト名
- s-ip - ローカルIPアドレス
- sc-status - レスポンスのHTTPステータスコード
- time - リクエストが処理された時刻(GMTのHH:mm:ss形式)
- time-taken - リクエストの処理にかかった時間(秒、浮動小数点数)
- x-threadname - 現在のリクエストスレッド名(後でスタックトレースと比較可能)
x-H(XXX)
のいずれの場合も、HttpServletRequestオブジェクトから以下のメソッドが呼び出されます。
x-H(authType)
: getAuthTypex-H(characterEncoding)
: getCharacterEncodingx-H(contentLength)
: getContentLengthx-H(locale)
: getLocalex-H(protocol)
: getProtocolx-H(remoteUser)
: getRemoteUserx-H(requestedSessionId)
: getRequestedSessionIdx-H(requestedSessionIdFromCookie)
: isRequestedSessionIdFromCookiex-H(requestedSessionIdValid)
: isRequestedSessionIdValidx-H(scheme)
: getSchemex-H(secure)
: isSecure
ヘッダー、Cookie、コンテキスト、リクエストまたはセッション属性、リクエストパラメータに関する情報を書き込むこともできます。
cs(XXX)
名前がXXXの受信リクエストヘッダーの場合sc(XXX)
名前がXXXの送信レスポンスヘッダーの場合x-A(XXX)
名前がXXXのサーブレットコンテキスト属性の場合x-C(XXX)
名前がXXXのCookieの場合(必要に応じてコンマ区切り)x-O(XXX)
名前がXXXのすべての送信レスポンスヘッダーを連結した場合x-P(XXX)
名前がXXXのURLエンコード(UTF-8を使用)されたリクエストパラメータの場合x-R(XXX)
名前がXXXのリクエスト属性の場合x-S(XXX)
名前がXXXのセッション属性の場合
JSON アクセスログ Valve
はじめに
属性
**JSONアクセスログバルブ**は、標準のアクセスログバルブのすべての構成属性をサポートします。className
に使用される値のみが異なります。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。拡張アクセスログバルブを使用するには、これを **org.apache.catalina.valves.JsonAccessLogValve** に設定する必要があります。 |
サポートされるパターンは通常のアクセスログバルブと同じですが、いくつかの違いがあります。
- リクエストはJSONオブジェクトとしてログに記録されます。
- サポートされている各「%X」単一文字パターン識別子は、このオブジェクトでキーと値のペアになります。それぞれの識別子に使用されるキーのリストについては、以下を参照してください。
- 「X」が「a」、「p」、または「t」のいずれかである`%{xxx}X`形式のサブキーを使用する各パターン識別子は、「key-xxx」形式のキーと値のペアになります。それぞれの識別子に使用されるキーのリストについては、以下を参照してください。
- 「X」が「c」、「i」、「o」、「r」、または「s」のいずれかである`%{xxx}X`形式のサブキーを使用する各パターン識別子は、サブオブジェクトになります。このサブオブジェクトを指すキーについては、以下を参照してください。サブオブジェクトのキーは、パターン内の「xxx」サブキーです。
- サポートされていない各「%X」文字パターン識別子は、「other-X」キーを使用してキーと値のペアになります。
- ログに記録される値は、同じパターン識別子に対して標準のアクセスログバルブによってログに記録される値と同じです。
- すべての「xxx」サブキーはJSONエスケープされます。
- パターン識別子の間のすべてのverbatimテキストは無視されます。
%a
: remoteAddr%A
: localAddr%b
: size%B
: byteSentNC%D
: elapsedTime%F
: firstByteTime%h
: host%H
: protocol%I
: threadName%l
: logicalUserName%m
: method%p
: port%q
: query%r
: request%s
: statusCode%S
: sessionId%t
: time%T
: elapsedTimeS%u
: user%U
: path%v
: localServerName%X
: connectionStatus
%c
: cookies%i
: requestHeaders%o
: responseHeaders%r
: requestAttributes%s
: sessionAttributes
アクセス制御
リモートアドレス Valve
はじめに
**リモートアドレスバルブ**を使用すると、このリクエストを送信したクライアントのIPアドレスを1つ以上の*正規表現*と比較し、リクエストの続行を許可するか、このクライアントからのリクエストの処理を拒否することができます。リモートアドレスバルブは、任意のCatalinaコンテナ(エンジン、ホスト、またはコンテキスト)に関連付けることができ、処理のためにこのコンテナに提示されたリクエストを受け入れる必要があります。それが渡される前に。
*正規表現*の構文は、「標準」ワイルドカードマッチングの構文とは異なります。Tomcatは`java.util.regex`パッケージを使用します。サポートされている式の詳細については、Javaドキュメントを参照してください。
属性`addConnectorPort`を`true`に設定した後、セミコロン( ";")で区切られたサーバーコネクタポートを追加して、各コネクタに異なる式を許可できます。
属性`usePeerAddress`を`true`に設定することにより、バルブはチェックに接続ピアアドレスを使用します。Tomcatの前にリバースプロキシがAJPプロトコル、またはHTTPプロトコルと`RemoteIp(Valve|Filter)`の組み合わせで使用されている場合、これはクライアントIPとは異なります。
拒否されたリクエストには、ステータスコード`403`のレスポンスが返されます。このステータスコードは、属性`denyStatus`を使用して上書きできます。
属性`invalidAuthenticationWhenDeny`を`true`に設定することにより、リクエストが拒否されたときの動作を拒否しないように変更し、代わりに無効な`authentication`ヘッダーを設定することができます。これは、コンテキスト属性`preemptiveAuthentication="true"`と組み合わせて使用すると便利です。
**注:** このバルブをIPv6アドレスで使用する場合の注意事項があります。このバルブが処理しているIPアドレスの形式は、それを取得するために使用されたAPIによって異なります。アドレスがInet6Addressクラスを使用してJavaソケットから取得された場合、その形式は`x:x:x:x:x:x:x:x`になります。つまり、localhostのIPアドレスは、より広く使用されている`::1`ではなく、`0:0:0:0:0:0:0:1`になります。実際の値については、アクセスログを参照してください。
参照: リモートホストバルブ、リモートCIDRバルブ、リモートIPバルブ、HTTPコネクタ構成。
属性
**リモートアドレスバルブ**は、次の構成属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これは**org.apache.catalina.valves.RemoteAddrValve**に設定する必要があります。 |
許可 |
リモートクライアントのIPアドレスと比較される正規表現(`java.util.regex`を使用)。この属性が指定されている場合、このリクエストを受け入れるには、リモートアドレスが一致する必要があります。この属性が指定されていない場合、リモートアドレスが`deny`パターンと一致しない限り、すべてのリクエストが受け入れられます。 |
拒否 |
リモートクライアントのIPアドレスと比較される正規表現(`java.util.regex`を使用)。この属性が指定されている場合、このリクエストを受け入れるには、リモートアドレスが一致してはなりません。この属性が指定されていない場合、リクエストの受け入れは`allow`属性によってのみ制御されます。 |
denyStatus |
拒否されたリクエストを拒否するときに使用されるHTTPレスポンスステータスコード。デフォルト値は`403`です。たとえば、値`404`に設定できます。 |
addConnectorPort |
セミコロン( ";")で区切られたクライアントIPアドレスにサーバーコネクタポートを追加します。これが`true`に設定されている場合、`allow`および`deny`で構成された式は、`ADDRESS;PORT`と比較されます。ここで、`ADDRESS`はクライアントIPアドレス、`PORT`はリクエストを受信したTomcatコネクタポートです。デフォルト値は`false`です。 |
invalidAuthenticationWhenDeny |
リクエストを拒否する必要がある場合は、拒否する代わりに、無効な`authentication`ヘッダーを設定します。これは、コンテキストに属性`preemptiveAuthentication="true"`が設定されている場合にのみ機能します。既存の`authentication`ヘッダーは上書きされません。実際には、アプリケーションにセキュリティ制約が構成されていない場合でも、拒否する代わりに認証がトリガーされます。 これは`addConnectorPort`と組み合わせて、クライアントとアプリケーションへのアクセスに使用されるコネクタに応じて認証をトリガーすることができます。 |
usePeerAddress |
クライアントIPアドレスの代わりに接続ピアアドレスを使用します。Tomcatの前にリバースプロキシがAJPプロトコル、またはHTTPプロトコルと`RemoteIp(Valve|Filter)`の組み合わせで使用されている場合、これらは異なります。 |
例 1
localhostから接続するクライアントのみにアクセスを許可するには
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1"/>
例 2
localhostから接続するクライアントには無制限のアクセスを許可しますが、他のすべてのクライアントにはポート8443のみにアクセスを許可するには
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
addConnectorPort="true"
allow="127\.\d+\.\d+\.\d+;\d*|::1;\d*|0:0:0:0:0:0:0:1;\d*|.*;8443"/>
例 3
ポート8009への無制限のアクセスを許可しますが、アプリケーションが別のポートでアクセスされた場合は基本認証をトリガーするには
<Context>
...
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
addConnectorPort="true"
invalidAuthenticationWhenDeny="true"
allow=".*;8009"/>
<Valve className="org.apache.catalina.authenticator.BasicAuthenticator" />
...
</Context>
リモートホスト Valve
はじめに
**リモートホストバルブ**を使用すると、このリクエストを送信したクライアントのホスト名を1つ以上の*正規表現*と比較し、リクエストの続行を許可するか、このクライアントからのリクエストの処理を拒否することができます。リモートホストバルブは、任意のCatalinaコンテナ(エンジン、ホスト、またはコンテキスト)に関連付けることができ、処理のためにこのコンテナに提示されたリクエストを受け入れる必要があります。それが渡される前に。
*正規表現*の構文は、「標準」ワイルドカードマッチングの構文とは異なります。Tomcatは`java.util.regex`パッケージを使用します。サポートされている式の詳細については、Javaドキュメントを参照してください。
属性`addConnectorPort`を`true`に設定した後、セミコロン( ";")で区切られたサーバーコネクタポートを追加して、各コネクタに異なる式を許可できます。
拒否されたリクエストには、ステータスコード`403`のレスポンスが返されます。このステータスコードは、属性`denyStatus`を使用して上書きできます。
属性`invalidAuthenticationWhenDeny`を`true`に設定することにより、リクエストが拒否されたときの動作を拒否しないように変更し、代わりに無効な`authentication`ヘッダーを設定することができます。これは、コンテキスト属性`preemptiveAuthentication="true"`と組み合わせて使用すると便利です。
**注:** このバルブは、メソッド`ServletRequest.getRemoteHost()`によって返される値を処理します。メソッドが適切なホスト名を返すようにするには、**コネクタ**で「DNSルックアップ」機能を有効にする必要があります。
参照: リモートアドレスバルブ、リモートCIDRバルブ、リモートIPバルブ、HTTPコネクタ構成。
属性
**リモートホストバルブ**は、次の構成属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これは**org.apache.catalina.valves.RemoteHostValve**に設定する必要があります。 |
許可 |
リモートクライアントのホスト名と比較される正規表現(`java.util.regex`を使用)。この属性が指定されている場合、このリクエストを受け入れるには、リモートホスト名が一致する必要があります。この属性が指定されていない場合、リモートホスト名が`deny`パターンと一致しない限り、すべてのリクエストが受け入れられます。 |
拒否 |
リモートクライアントのホスト名と比較される正規表現(`java.util.regex`を使用)。この属性が指定されている場合、このリクエストを受け入れるには、リモートホスト名が一致してはなりません。この属性が指定されていない場合、リクエストの受け入れは`allow`属性によってのみ制御されます。 |
denyStatus |
拒否されたリクエストを拒否するときに使用されるHTTPレスポンスステータスコード。デフォルト値は`403`です。たとえば、値`404`に設定できます。 |
addConnectorPort |
セミコロン( ";")で区切られたクライアントホスト名にサーバーコネクタポートを追加します。これが`true`に設定されている場合、`allow`および`deny`で構成された式は、`HOSTNAME;PORT`と比較されます。ここで、`HOSTNAME`はクライアントホスト名、`PORT`はリクエストを受信したTomcatコネクタポートです。デフォルト値は`false`です。 |
invalidAuthenticationWhenDeny |
リクエストを拒否する必要がある場合は、拒否する代わりに、無効な`authentication`ヘッダーを設定します。これは、コンテキストに属性`preemptiveAuthentication="true"`が設定されている場合にのみ機能します。既存の`authentication`ヘッダーは上書きされません。実際には、アプリケーションにセキュリティ制約が構成されていない場合でも、拒否する代わりに認証がトリガーされます。 これは`addConnectorPort`と組み合わせて、クライアントとアプリケーションへのアクセスに使用されるコネクタに応じて認証をトリガーすることができます。 |
リモートCIDR Valve
はじめに
**リモートCIDRバルブ**を使用すると、このリクエストを送信したクライアントのIPアドレスを、CIDR表記法に従う1つ以上のネットマスクと比較し、リクエストの続行を許可するか、このクライアントからのリクエストの処理を拒否することができます。IPv4とIPv6はどちらも完全にサポートされています。リモートCIDRバルブは、任意のCatalinaコンテナ(エンジン、ホスト、またはコンテキスト)に関連付けることができ、処理のためにこのコンテナに提示されたリクエストを受け入れる必要があります。それが渡される前に。
このバルブは、Apacheの`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`などのサブドメイン表記もサポートされていません。
属性`addConnectorPort`を`true`に設定した後、セミコロン( ";")で区切られたサーバーコネクタポートを追加して、各コネクタに異なる式を許可できます。
属性`usePeerAddress`を`true`に設定することにより、バルブはチェックに接続ピアアドレスを使用します。Tomcatの前にリバースプロキシがAJPプロトコル、またはHTTPプロトコルと`RemoteIp(Valve|Filter)`の組み合わせで使用されている場合、これはクライアントIPとは異なります。
拒否されたリクエストには、ステータスコード`403`のレスポンスが返されます。このステータスコードは、属性`denyStatus`を使用して上書きできます。
属性`invalidAuthenticationWhenDeny`を`true`に設定することにより、リクエストが拒否されたときの動作を拒否しないように変更し、代わりに無効な`authentication`ヘッダーを設定することができます。これは、コンテキスト属性`preemptiveAuthentication="true"`と組み合わせて使用すると便利です。
このバルブのその他の機能は次のとおりです。
- CIDRプレフィックスを省略すると、このバルブは単一IPバルブになります。
- リモートホストバルブとは異なり、短縮形式(`::1`、`fe80::/71`など)のIPv6アドレスを処理できます。
参照: リモートアドレスバルブ、リモートホストバルブ、リモートIPバルブ、HTTPコネクタ構成。
属性
**リモートCIDRバルブ**は、次の構成属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これは**org.apache.catalina.valves.RemoteCIDRValve**に設定する必要があります。 |
許可 |
リモートクライアントのIPアドレスが照合される、コンマ区切りのIPv4またはIPv6ネットマスクまたはアドレスのリスト。この属性が指定されている場合、このリクエストを受け入れるには、リモートアドレスが一致する必要があります。この属性が指定されていない場合、リモートIPが`deny`属性のネットマスクと一致しない限り、すべてのリクエストが受け入れられます。 |
拒否 |
リモートクライアントのIPアドレスが照合される、カンマ区切りのIPv4またはIPv6ネットマスクまたはアドレスのリスト。この属性が指定されている場合、このリクエストが受け入れられるためには、リモートアドレスが一致してはいけません。この属性が指定されていない場合、リクエストの受け入れは |
denyStatus |
拒否されたリクエストを拒否するときに使用されるHTTPレスポンスステータスコード。デフォルト値は`403`です。たとえば、値`404`に設定できます。 |
addConnectorPort |
セミコロン( ";")で区切られたクライアントIPアドレスにサーバーコネクタポートを追加します。これが`true`に設定されている場合、`allow`および`deny`で構成された式は、`ADDRESS;PORT`と比較されます。ここで、`ADDRESS`はクライアントIPアドレス、`PORT`はリクエストを受信したTomcatコネクタポートです。デフォルト値は`false`です。 |
invalidAuthenticationWhenDeny |
リクエストを拒否する必要がある場合は、拒否する代わりに、無効な`authentication`ヘッダーを設定します。これは、コンテキストに属性`preemptiveAuthentication="true"`が設定されている場合にのみ機能します。既存の`authentication`ヘッダーは上書きされません。実際には、アプリケーションにセキュリティ制約が構成されていない場合でも、拒否する代わりに認証がトリガーされます。 これは`addConnectorPort`と組み合わせて、クライアントとアプリケーションへのアクセスに使用されるコネクタに応じて認証をトリガーすることができます。 |
usePeerAddress |
クライアントIPアドレスの代わりに接続ピアアドレスを使用します。Tomcatの前にリバースプロキシがAJPプロトコル、またはHTTPプロトコルと`RemoteIp(Valve|Filter)`の組み合わせで使用されている場合、これらは異なります。 |
例 1
localhostから接続するクライアントのみにアクセスを許可するには
<Valve className="org.apache.catalina.valves.RemoteCIDRValve"
allow="127.0.0.1, ::1"/>
例 2
ローカルネットワークから接続するクライアントには無制限のアクセスを許可しますが、ネットワーク10.のすべてのクライアントにはポート8443へのアクセスのみを許可します。
<Valve className="org.apache.catalina.valves.RemoteCIDRValve"
addConnectorPort="true"
allow="127.0.0.1;\d*|::1;\d*|10.0.0.0/8;8443"/>
例 3
ネットワーク10.からのポート8009へのアクセスを許可しますが、アプリケーションが別のポートでアクセスされた場合は基本認証をトリガーします。
<Context>
...
<Valve className="org.apache.catalina.valves.RemoteCIDRValve"
addConnectorPort="true"
invalidAuthenticationWhenDeny="true"
allow="10.0.0.0/8;8009"/>
<Valve className="org.apache.catalina.authenticator.BasicAuthenticator" />
...
</Context>
プロキシサポート
ロードバランサドレイニング Valve
はじめに
mod_jkまたはmod_proxy_ajpを使用する場合、クライアントのセッションIDを使用して、リクエストの処理に使用されるバックエンドサーバーが決定されます。ターゲットノードが「ドレイン」されている場合(mod_jkでは *DISABLED* 状態、mod_proxy_ajpでは *Drain (N)* 状態)、期限切れのセッションのリクエストは、実際にドレイン中のノードのドレインを失敗させる可能性があります。
残念ながら、AJPベースのロードバランサーは、クライアントが提供したセッションIDが有効かどうかを証明できないため、そのノードをターゲットとしているように見えるセッションのすべてのリクエストを無効化(または「ドレイン」)されたノードに送信し、「ドレイン」プロセスが必要以上に長くかかる原因となります。
このValveは、無効なセッションのリクエストを検出し、リクエストからセッション情報を削除し、同じURLにリダイレクトします。ロードバランサーは、リクエストを処理するために別の(アクティブな)ノードを選択する必要があります。これにより、無効化されたノードの「ドレイン」プロセスが高速化されます。
ノードのアクティブ化状態は、ロードバランサーによってリクエストで送信されるため、無効化されるノードで状態を変更する必要はありません。ValveパイプラインでこのValveを構成するだけで、アクティブ化状態が「disabled」に設定されている場合にアクションが実行されます。
このValveは、認証Valveが保護されたリソースへのリクエストを保存する前にリクエストをリダイレクトできる必要があるため、認証ValveよりもValveパイプラインの早い段階に登録するように注意する必要があります。これが発生すると、新しいセッションが作成され、新しい有効なセッションが確立されるため、ドレインプロセスが停止します。
属性
**ロードバランサードレインValve** は、次の構成属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これは **org.apache.catalina.valves.LoadBalancerDrainingValve** に設定する必要があります。 |
redirectStatusCode |
クライアントがロードバランサーによってリバランスされるようにリダイレクトされる際に使用されるカスタムリダイレクトコードを設定できます。デフォルトは307 TEMPORARY_REDIRECTです。 |
ignoreCookieName |
|
ignoreCookieValue |
|
リモートIP Valve
はじめに
mod_remoteipのTomcatポートであるこのValveは、リクエストの明らかなクライアントリモートIPアドレスとホスト名を、プロキシまたはロードバランサーによってリクエストヘッダー(例:「X-Forwarded-For」)を介して提示されたIPアドレスリストに置き換えます。
このバルブのもう1つの機能は、明らかなスキーム(http/https)、サーバーポート、およびrequest.secure
を、プロキシまたはロードバランサーによってリクエストヘッダー(例:「X-Forwarded-Proto」)を介して提示されたスキームに置き換えることです。
このValveは、必要に応じてEngine
、Host
、またはContext
レベルで使用できます。通常、このValveはEngine
レベルで使用されます。
リモートアドレス/ホストValveと組み合わせて使用する場合は、正しいクライアントIPアドレスがリモートアドレス/ホストValveに提示されるように、このValveを最初に定義する必要があります。
**注:** デフォルトでは、このValveはアクセスログに書き込まれる値に影響を与えません。リクエスト処理がValveを離れると元の値が復元され、これは常にアクセスログ記録よりも早く発生します。このValveによって設定されたリモートアドレス、リモートホスト、サーバーポート、およびプロトコルの値をアクセスログに渡すために、これらはリクエスト属性に配置されます。これらの値をここに公開することはデフォルトで有効になっていますが、AccessLogValve
はそれらを使用するように明示的に構成する必要があります。 AccessLogValve
のrequestAttributesEnabled
属性のドキュメントを参照してください。
このValveによって設定され、アクセスログで使用できるリクエスト属性の名前は次のとおりです。
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 Valve** は、次の構成属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これは **org.apache.catalina.valves.RemoteIpValve** に設定する必要があります。 |
remoteIpHeader |
リクエスト元のクライアントから始まる、通過したIPアドレスのリストを保持する、このValveによって読み取られるHTTPヘッダーの名前。指定しない場合、デフォルトの `x-forwarded-for` が使用されます。 |
internalProxies |
プロキシのIPアドレスが内部プロキシと見なされるために一致する必要がある正規表現( `java.util.regex` を使用)。 **remoteIpHeader** に表示される内部プロキシは信頼され、 **proxiesHeader** 値には表示されません。指定しない場合、デフォルト値の ` 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}|100\.6[4-9]{1}\.\d{1,3}\.\d{1,3}|100\.[7-9]{1}\d{1}\.\d{1,3}\.\d{1,3}|100\.1[0-1]{1}\d{1}\.\d{1,3}\.\d{1,3}|100\.12[0-7]{1}\.\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}|0:0:0:0:0:0:0:1 ` が使用されます。 |
proxiesHeader |
受信 **remoteIpHeader** で処理されたプロキシのリストを保持するために、このValveによって作成されるHTTPヘッダーの名前。指定しない場合、デフォルトの `x-forwarded-by` が使用されます。 |
requestAttributesEnabled |
AccessLog実装で使用されるリクエスト属性を設定して、リモートアドレス、リモートホスト、サーバーポート、およびプロトコルに対してリクエストによって返される値をオーバーライドするには、 `true` に設定します。リクエスト属性は、転送されたリモートアドレスをマネージャーWebアプリケーションのステータスページに表示できるようにするためにも使用されます。設定しない場合、デフォルト値の `true` が使用されます。 |
trustedProxies |
プロキシのIPアドレスが信頼できるプロキシと見なされるために一致する必要がある正規表現(`java.util.regex`を使用)。 **remoteIpHeader** に表示される信頼できるプロキシは信頼され、 **proxiesHeader** 値に表示されます。指定しない場合、プロキシは信頼されません。 |
protocolHeader |
クライアントがプロキシに接続するために使用するプロトコルを保持する、このValveによって読み取られるHTTPヘッダーの名前。指定しない場合、デフォルトの `X-Forwarded-Proto` が使用されます。 |
hostHeader |
クライアントがプロキシに接続するために使用するホストを保持する、このValveによって読み取られるHTTPヘッダーの名前。指定しない場合、デフォルトの `null` が使用されます。 |
portHeader |
クライアントがプロキシに接続するために使用するポートを保持する、このValveによって読み取られるHTTPヘッダーの名前。指定しない場合、デフォルトの `null` が使用されます。 |
protocolHeaderHttpsValue |
HTTPSリクエストであることを示す **protocolHeader** の値。指定しない場合、デフォルトの `https` が使用されます。 |
httpServerPort |
**protocolHeader** が `http` プロトコルを示し、 **portHeader** が存在しない場合に `ServletRequest.getServerPort()` によって返される値。指定しない場合、デフォルトの `80` が使用されます。 |
httpsServerPort |
**protocolHeader** が `https` プロトコルを示し、 **portHeader** が存在しない場合に `ServletRequest.getServerPort()` によって返される値。指定しない場合、デフォルトの `443` が使用されます。 |
changeLocalName |
`true` の場合、 `ServletRequest.getLocalHost()` および `ServletRequest.getServerHost()` によって返される値は、このValveによって変更されます。指定しない場合、デフォルトの `false` が使用されます。 |
changeLocalPort |
`true` の場合、 `ServletRequest.getLocalPort()` および `ServletRequest.getServerPort()` によって返される値は、このValveによって変更されます。指定しない場合、デフォルトの `false` が使用されます。 |
SSL Valve
はじめに
mod_proxy_httpを使用する場合、クライアントSSL情報はプロトコルに含まれません(mod_jkおよびmod_proxy_ajpとは異なります)。クライアントSSL情報をTomcatで使用できるようにするには、追加の構成が必要です。httpdでは、mod_headersを使用してSSL情報をHTTPヘッダーとして追加します。Tomcatでは、このValveを使用してHTTPヘッダーから情報を読み取り、リクエストに挿入します。
注:クライアントが偽のヘッダーを送信することによってSSL情報を偽装するのを防ぐため、httpdによってすべての要求に対してヘッダーが常に設定されていることを確認してください。
httpdが必要なヘッダーを設定するように構成するには、次を追加します。
<IfModule ssl_module>
RequestHeader set SSL_CLIENT_CERT "%{SSL_CLIENT_CERT}s"
RequestHeader set SSL_CIPHER "%{SSL_CIPHER}s"
RequestHeader set SSL_SESSION_ID "%{SSL_SESSION_ID}s"
RequestHeader set SSL_CIPHER_USEKEYSIZE "%{SSL_CIPHER_USEKEYSIZE}s"
</IfModule>
属性
**SSL Valve** は、次の構成属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これは **org.apache.catalina.valves.SSLValve** に設定する必要があります。 |
sslClientCertHeader |
ssl_client_certヘッダーのカスタム名を設定できます。指定しない場合、デフォルトの `ssl_client_cert` が使用されます。 |
sslClientEscapedCertHeader |
ssl_client_escaped_certヘッダーのカスタム名を設定できます。指定しない場合、デフォルトの `ssl_client_escaped_cert` が使用されます。 このヘッダーは、Nginxプロキシに役立ち、ssl_client_certヘッダーよりも優先されます。 |
sslCipherHeader |
ssl_cipherヘッダーのカスタム名を設定できます。指定しない場合、デフォルトの `ssl_cipher` が使用されます。 |
sslSessionIdHeader |
ssl_session_idヘッダーのカスタム名を設定できます。指定しない場合、デフォルトの `ssl_session_id` が使用されます。 |
sslCipherUserKeySizeHeader |
ssl_cipher_usekeysizeヘッダーのカスタム名を設定できます。指定しない場合、デフォルトの `ssl_cipher_usekeysize` が使用されます。 |
シングルサインオン Valve
はじめに
*シングルサインオンValve* は、ユーザーが仮想ホストに関連付けられたWebアプリケーションのいずれかにサインオンし、同じ仮想ホスト上の他のすべてのWebアプリケーションでIDを認識できるようにする場合に使用されます。
詳細については、 **Host** 要素のシングルサインオンの特別な機能を参照してください。
属性
**シングルサインオン** Valveは、次の構成属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これは **org.apache.catalina.authenticator.SingleSignOn** に設定する必要があります。 |
requireReauthentication |
デフォルトはfalse。各リクエストをセキュリティ **Realm** に対して再認証する必要があるかどうかを決定するフラグ。「true」の場合、このValveはキャッシュされたセキュリティ資格情報(ユーザー名とパスワード)を使用して、SSOセッションに関連付けられた各リクエストを **Realm** に対して再認証します。「false」の場合、Valveは、 **Realm** を再確認することなく、有効なSSO Cookieの存在に基づいてリクエストを認証できます。 |
cookieDomain |
sso Cookieに使用されるホストドメインを設定します。 |
cookieName |
sso Cookieに使用されるCookie名を設定します。デフォルト値は `JSESSIONIDSSO` です。 |
認証
このセクションのValveは、 **org.apache.catalina.Authenticator** インターフェースを実装しています。
Basic 認証 Valve
はじめに
属性
**基本認証Valve** は、次の構成属性をサポートしています。
属性 | 説明 |
---|---|
allowCorsPreflight |
CORS プリフライトリクエストと思われるリクエストが、CORS 仕様で要求されるように、認証者をバイパスすることを許可するかどうか。許可される値は |
alwaysUseSession |
ユーザーが認証されたら、常にセッションを使用する必要があるかどうか。認証されたプリンシパルをキャッシュするためにセッションを使用できるため、パフォーマンスが向上する可能性があります。そのため、すべてのリクエストでレルムを介してユーザーを認証する必要がなくなります。これは、JNDI レルムまたはデータソースレルムと組み合わせて BASIC 認証を使用する場合などに役立ちます。ただし、セッションの作成と GC に伴うパフォーマンスコストも発生します。設定しない場合、デフォルト値の |
cache |
リクエストが HTTP セッションの一部である場合、認証されたプリンシパルをキャッシュする必要があるかどうか。指定しない場合、デフォルト値の |
changeSessionIdOnAuthentication |
ユーザーが認証された時点でセッションが存在する場合、セッション ID を変更するかどうかを制御します。これは、セッション固定攻撃を防ぐためです。設定しない場合、デフォルト値の |
charset |
RFC 7617 に従って、 |
className |
使用する実装の Java クラス名。これは org.apache.catalina.authenticator.BasicAuthenticator に設定する必要があります。 |
disableProxyCaching |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
jaspicCallbackHandlerClass |
JASPIC が使用する必要がある |
securePagesWithPragma |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
secureRandomAlgorithm |
セッション ID を生成する |
secureRandomClass |
SSO セッション ID を生成するために使用する |
secureRandomProvider |
SSO セッション ID を生成する |
sendAuthInfoResponseHeaders |
転送/プロキシされたリクエストのレスポンスヘッダーとして認証情報(リモートユーザーと認証タイプ)を返すかどうかを制御します。 |
trimCredentials |
解析された資格情報から先頭または末尾の空白を削除するかどうかを制御します。指定しない場合、デフォルト値は 注: この属性は Tomcat 11 以降で削除されます。 |
Digest 認証 Valve
はじめに
属性
ダイジェスト認証バルブ は、次の構成属性をサポートしています。
属性 | 説明 |
---|---|
algorithms |
認証プロセスに使用されるダイジェストアルゴリズムのカンマ区切りリスト。アルゴリズムは、Java 標準名または RFC 7616 で使用される名前を使用して指定できます。指定しない場合、デフォルト値の |
allowCorsPreflight |
CORS プリフライトリクエストと思われるリクエストが、CORS 仕様で要求されるように、認証者をバイパスすることを許可するかどうか。許可される値は |
alwaysUseSession |
ユーザーが認証されたら、常にセッションを使用する必要があるかどうか。認証されたプリンシパルをキャッシュするためにセッションを使用できるため、パフォーマンスが向上する可能性があります。そのため、すべてのリクエストでレルムを介してユーザーを認証する必要がなくなります。これは、JNDI レルムまたはデータソースレルムと組み合わせて BASIC 認証を使用する場合などに役立ちます。ただし、セッションの作成と GC に伴うパフォーマンスコストも発生します。設定しない場合、デフォルト値の |
cache |
リクエストが HTTP セッションの一部である場合、認証されたプリンシパルをキャッシュする必要があるかどうか。指定しない場合、デフォルト値の |
changeSessionIdOnAuthentication |
ユーザーが認証された時点でセッションが存在する場合、セッション ID を変更するかどうかを制御します。これは、セッション固定攻撃を防ぐためです。設定しない場合、デフォルト値の |
className |
使用する実装の Java クラス名。これは org.apache.catalina.authenticator.DigestAuthenticator に設定する必要があります。 |
disableProxyCaching |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
jaspicCallbackHandlerClass |
JASPIC が使用する必要がある |
key |
ダイジェスト認証で使用される秘密鍵。設定されていない場合は、安全なランダム値が生成されます。これは通常、サーバーの再起動時またはクラスタ全体でキー値を一定に保つ必要がある場合にのみ設定する必要があります。 |
nonceCacheSize |
リプレイ攻撃から保護するため、DIGEST 認証子はサーバー nonce と nonce カウント値を追跡します。この属性は、そのキャッシュのサイズを制御します。指定しない場合、デフォルト値の 1000 が使用されます。 |
nonceCountWindowSize |
クライアントリクエストは順序どおりに処理されない場合があり、そのため nonce カウント値が順序どおりに処理されない場合があります。nonce カウントが順序どおりに提示された場合の認証エラーを防ぐため、認証子は nonce カウント値のウィンドウを追跡します。この属性は、そのウィンドウの大きさを制御します。指定しない場合、デフォルト値の 100 が使用されます。 |
nonceValidity |
サーバーで生成された nonce が認証に使用できる有効期間(ミリ秒単位)。指定しない場合、デフォルト値の 300000(5 分)が使用されます。 |
opaque |
ダイジェスト認証で使用される opaque サーバー文字列。設定されていない場合は、ランダム値が生成されます。これは通常、サーバーの再起動時またはクラスタ全体で opaque 値を一定に保つ必要がある場合にのみ設定する必要があります。 |
securePagesWithPragma |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
secureRandomAlgorithm |
セッション ID を生成する |
secureRandomClass |
SSO セッション ID を生成するために使用する |
secureRandomProvider |
SSO セッション ID を生成する |
sendAuthInfoResponseHeaders |
転送/プロキシされたリクエストのレスポンスヘッダーとして認証情報(リモートユーザーと認証タイプ)を返すかどうかを制御します。 |
validateUri |
RFC2617 で要求されているように、URI を検証する必要があるかどうか。指定しない場合、デフォルト値の |
Form 認証 Valve
はじめに
属性
フォーム認証バルブ は、次の構成属性をサポートしています。
属性 | 説明 |
---|---|
allowCorsPreflight |
CORS プリフライトリクエストと思われるリクエストが、CORS 仕様で要求されるように、認証者をバイパスすることを許可するかどうか。許可される値は |
authenticationSessionTimeout |
認証プロセスでセッションが作成される場合、これは認証プロセス中の最大セッションタイムアウト(秒単位)です。認証が完了すると、デフォルトのセッションタイムアウトが適用されます。認証プロセスが開始される前に存在するセッションは、全体を通して元のセッションタイムアウトを保持します。設定しない場合、デフォルト値の |
changeSessionIdOnAuthentication |
ユーザーが認証された時点でセッションが存在する場合、セッション ID を変更するかどうかを制御します。これは、セッション固定攻撃を防ぐためです。設定しない場合、デフォルト値の |
characterEncoding |
リクエストからユーザー名とパスワードのパラメーターを読み取るために使用する文字エンコーディング。設定されていない場合は、リクエスト本文のエンコーディングが使用されます。 |
className |
使用する実装の Java クラス名。これは **org.apache.catalina.authenticator.FormAuthenticator** に設定する必要があります。 |
disableProxyCaching |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
jaspicCallbackHandlerClass |
JASPIC が使用する必要がある |
landingPage |
ログインページを直接リクエストしたり、ログインを長時間遅らせてセッションが期限切れになったりするなど、FORM 認証プロセスが誤用された場合の動作を制御します。この属性が設定されている場合、エラーレスポンスコードを返すのではなく、有効な資格情報でログインフォームが送信された場合、Tomcat はユーザーを指定されたランディングページにリダイレクトします。ログインを処理するには、ランディングページが保護されたリソース(つまり、認証が必要なリソース)である必要があります。ランディングページに認証が必要ない場合、ユーザーはログインせず、保護されたページにアクセスしたときに資格情報の入力を再び求められます。 |
securePagesWithPragma |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
secureRandomAlgorithm |
セッション ID を生成する |
secureRandomClass |
SSO セッション ID を生成するために使用する |
secureRandomProvider |
SSO セッション ID を生成する |
sendAuthInfoResponseHeaders |
転送/プロキシされたリクエストのレスポンスヘッダーとして認証情報(リモートユーザーと認証タイプ)を返すかどうかを制御します。 |
SSL 認証 Valve
はじめに
属性
SSL 認証バルブ は、次の構成属性をサポートしています。
属性 | 説明 |
---|---|
allowCorsPreflight |
CORS プリフライトリクエストと思われるリクエストが、CORS 仕様で要求されるように、認証者をバイパスすることを許可するかどうか。許可される値は |
cache |
リクエストが HTTP セッションの一部である場合、認証されたプリンシパルをキャッシュする必要があるかどうか。指定しない場合、デフォルト値の |
className |
使用する実装の Java クラス名。これは **org.apache.catalina.authenticator.SSLAuthenticator** に設定する必要があります。 |
changeSessionIdOnAuthentication |
ユーザーが認証された時点でセッションが存在する場合、セッション ID を変更するかどうかを制御します。これは、セッション固定攻撃を防ぐためです。設定しない場合、デフォルト値の |
disableProxyCaching |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
jaspicCallbackHandlerClass |
JASPIC が使用する必要がある |
securePagesWithPragma |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
secureRandomAlgorithm |
セッション ID を生成する |
secureRandomClass |
SSO セッション ID を生成するために使用する |
secureRandomProvider |
SSO セッション ID を生成する |
SPNEGO Valve
はじめに
属性
SPNEGO 認証バルブ は、次の構成属性をサポートしています。
属性 | 説明 |
---|---|
allowCorsPreflight |
CORS プリフライトリクエストと思われるリクエストが、CORS 仕様で要求されるように、認証者をバイパスすることを許可するかどうか。許可される値は |
alwaysUseSession |
ユーザーが認証されたら、常にセッションを使用する必要があるかどうか。認証されたプリンシパルをキャッシュするためにセッションを使用できるため、パフォーマンスが向上する可能性があります。そのため、すべてのリクエストでユーザーを認証する必要がなくなります。これは、サーバーが認証済みユーザーをキャッシュすると想定しているクライアントにも役立ちます。ただし、セッションの作成と GC に伴うパフォーマンスコストも発生します。代替ソリューションについては、 |
applyJava8u40Fix |
Java 8 update 40 ( JDK-8048194) 以降に導入された修正により、Windows 2008 R2 サーバーで Tomcat を実行している IE の SPNEGO 認証が壊れました。このオプションは、SPNEGO 認証が引き続き機能することを可能にする回避策を有効にします。回避策は他の構成に影響を与えるべきではないため、デフォルトで有効になっています。必要に応じて、この属性を |
cache |
リクエストが HTTP セッションの一部である場合、認証されたプリンシパルをキャッシュする必要があるかどうか。指定しない場合、デフォルト値の |
className |
使用する実装の Java クラス名。これは **org.apache.catalina.authenticator.SpnegoAuthenticator** に設定する必要があります。 |
changeSessionIdOnAuthentication |
ユーザーが認証された時点でセッションが存在する場合、セッション ID を変更するかどうかを制御します。これは、セッション固定攻撃を防ぐためです。設定しない場合、デフォルト値の |
disableProxyCaching |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
jaspicCallbackHandlerClass |
JASPIC が使用する必要がある |
loginConfigName(ログイン設定名) |
サービスとしてログインするために使用されるJAASログイン設定の名前です。指定しない場合、デフォルトの |
noKeepAliveUserAgents(キープアライブ無効ユーザーエージェント) |
一部のクライアント(ほとんどのブラウザではありません)は、サーバーが接続の認証済みユーザー情報をキャッシュし、すべてのリクエストで資格情報を再送信しないことを期待しています。Tomcatは、HTTPセッションが利用可能な場合を除き、これを実行しません。セッションは、アプリケーションがセッションを作成するか、この認証器で セッションを作成する代わりに、この属性を使用して、HTTPキープアライブが無効になっているユーザーエージェントを定義できます。これは、接続が単一のリクエストにのみ使用されるため、接続ごとに認証済みユーザー情報をキャッシュする機能がないことを意味します。HTTPキープアライブを無効にすると、パフォーマンスコストが発生します。 この属性は、ユーザーエージェント文字列全体に一致する正規表現である必要があります(例: |
securePagesWithPragma |
セキュリティ制約によって保護されているページのキャッシュを制御します。これを |
secureRandomAlgorithm |
セッション ID を生成する |
secureRandomClass |
SSO セッション ID を生成するために使用する |
secureRandomProvider |
SSO セッション ID を生成する |
sendAuthInfoResponseHeaders |
転送/プロキシされたリクエストのレスポンスヘッダーとして認証情報(リモートユーザーと認証タイプ)を返すかどうかを制御します。 |
storeDelegatedCredential(委任された資格情報の保存) |
ユーザーの委任された資格情報をユーザーPrincipalに格納するかどうかを制御します。使用可能な場合、委任された資格情報は、 |
エラーレポート Valve
はじめに
**エラーレポートバルブ**は、HTMLエラーページを生成して返す、HTTPステータスコード用のシンプルなエラーハンドラーです。特定のステータスコードや例外タイプに対して、事前に定義された静的HTMLページを返すように設定することもできます。
**注:** showServerInfoとshowReportの両方を無効にすると、HTTPステータスコードのみが返されます。
属性
**エラーレポートバルブ**は、以下の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。デフォルトのエラーレポートバルブを使用するには、これを**org.apache.catalina.valves.ErrorReportValve**に設定する**必要があります**。 |
errorCode.nnn |
|
exceptionType.fullyQualifiedClassName(例外タイプ.完全修飾クラス名) |
エラーが発生し、 |
showReport(レポートの表示) |
エラーが発生した場合にエラーレポート(カスタムエラーメッセージまたはスタックトレース)を表示するかどうかを決定するフラグ。 |
showServerInfo(サーバー情報の表示) |
エラーが発生した場合にサーバー情報を表示するかどうかを決定するフラグ。 |
JSON エラーレポート Valve
はじめに
**JSONエラーレポートバルブ**は、JSONエラーメッセージを返すHTTPステータスコード用のシンプルなエラーハンドラーです。
Host
のerrorReportValveClass
属性でこのクラスを指定することにより、ErrorReportValve
の代わりに使用され、HTMLの代わりにJSONレスポンスが返されます。
属性
**JSONエラーレポートバルブ**は、以下の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これは**org.apache.catalina.valves.JsonErrorReportValve**に設定する**必要があります**。 |
プロキシエラーレポート Valve
はじめに
**プロキシエラーレポートバルブ**は、エラーレポートの生成を担当する別の場所にリダイレクトまたはプロキシするHTTPステータスコード用のシンプルなエラーハンドラーです。
Host
のerrorReportValveClass
属性でこのクラスを指定することにより、デフォルトの属性値を持つErrorReportValve
の代わりに使用されます。属性を設定するには、Host
要素内にネストされたバルブを定義できます。
属性
**プロキシエラーレポートバルブ**は、以下の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これは**org.apache.catalina.valves.ProxyErrorReportValve**に設定する**必要があります**。 |
usePropertiesFile(プロパティファイルの使用) |
|
useRedirect(リダイレクトの使用) |
|
設定
**プロキシエラーレポートバルブ**は、クラスパスからリソースファイル**ProxyErrorReportValve.properties**を使用できます。各エントリはstatusCode = baseUrlです。 baseUrlには、自動的に追加されるURLパラメータ、statusCode、statusDescription、requestUri、およびthrowableを含めないでください。 0
という名前の特別なキーを使用して、他のマップされていないコードをリダイレクトまたはプロキシURLに一致させる必要があります。
Crawler セッションマネージャ Valve
はじめに
Webクローラーは、サイトをクロールする際に数千ものセッションの作成をトリガーする可能性があり、 znacz量のメモリ消費が発生する可能性があります。このバルブは、リクエストでセッショントークンを提供するかどうかに関係なく、クローラーが通常のユーザーと同様に単一のセッションに関連付けられるようにします。
このValveは、必要に応じてEngine
、Host
、またはContext
レベルで使用できます。通常、このValveはEngine
レベルで使用されます。
リモートIPバルブと組み合わせて使用する場合、このバルブに正しいクライアントIPアドレスが表示されるように、このバルブの前にリモートIPバルブを定義する必要があります。
属性
**クローラセッションマネージャバルブ**は、以下の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これは**org.apache.catalina.valves.CrawlerSessionManagerValve**に設定する**必要があります**。 |
contextAware(コンテキスト認識) |
クライアントIPとともにコンテキスト名を使用して、再利用するセッションを識別するフラグ。 |
crawlerIps(クローラーIP) |
リクエストがWebクローラーからのものであるかどうかを判断するために、クライアントIPが照合される正規表現( |
crawlerUserAgents(クローラーユーザーエージェント) |
リクエストがWebクローラーからのものであるかどうかを判断するために、ユーザーエージェントHTTPリクエストヘッダーが照合される正規表現( |
hostAware(ホスト認識) |
設定されたホストをクライアントIPとともに使用して、再利用するセッションを識別するフラグ。 |
sessionInactiveInterval(セッション非アクティブ間隔) |
クローラセッションマネージャバルブがクライアントからのアクティビティなしでクライアントIPとセッションIDのマッピングをメモリに保持する必要がある最小時間(秒単位)。クライアントIP /セッションキャッシュは、この間隔よりも長く非アクティブであったマッピングを定期的にパージします。指定しない場合、デフォルト値の |
スタックスレッド検出 Valve
はじめに
このバルブを使用すると、処理に時間がかかるリクエストを検出できます。これは、処理中のスレッドがスタックしていることを示している可能性があります。さらに、オプションでそのようなスレッドを中断して、ブロックを解除することもできます。
このようなリクエストが検出されると、そのスレッドの現在のスタックトレースがWARNレベルでTomcatログに書き込まれます。
スタックスレッドのIDと名前は、stuckThreadIds
属性とstuckThreadNames
属性のJMXを介して利用できます。 IDは、標準のThreading JVM MBean(java.lang:type=Threading
)で使用して、各スタックスレッドに関する他の情報を取得できます。
属性
**スタックスレッド検出バルブ**は、以下の設定属性をサポートしています。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これは**org.apache.catalina.valves.StuckThreadDetectionValve**に設定する**必要があります**。 |
threshold(しきい値) |
スレッドがスタックしていると見なされるまでの最小期間(秒単位)。デフォルトは600秒です。 0に設定すると、検出は無効になります。 注:検出(およびオプションの中断)は、このバルブを宣言するコンテナ(エンジン、ホスト、またはコンテキスト)のバックグラウンドスレッドで行われるため、しきい値はこのコンテナの |
interruptThreadThreshold(スレッド中断しきい値) |
スタックスレッドを中断して「解放」を試みるまでの最小期間(秒単位)。 スレッドのスタックが解除されるという保証はないことに注意してください。これは通常、I / Oまたはロックでスタックしたスレッドではうまく機能しますが、無限ループの場合はおそらく役に立ちません。 デフォルトは-1で、この機能は無効になります。有効にするには、値を |
セマフォ Valve
はじめに
**セマフォバルブ**は、同時リクエスト処理スレッドの数を制限できます。
**org.apache.catalina.valves.SemaphoreValve**は、サブクラスが動作をカスタマイズするためにオーバーライドできるメソッドを提供します
controlConcurrency
は、条件を追加するためにオーバーライドできます。permitDenied
は、許可が granted されない場合にエラー処理を追加するためにオーバーライドできます。
属性
**セマフォバルブ**は、以下の設定属性をサポートしています。
属性 | 説明 |
---|---|
block(ブロック) |
許可が利用可能になるまでスレッドをブロックするかどうかを決定するフラグ。デフォルト値は**true**です。 |
className |
使用する実装のJavaクラス名。これは**org.apache.catalina.valves.SemaphoreValve**に設定する**必要があります**。 |
concurrency(同時実行性) |
セマフォの同時実行レベル。デフォルト値は**10**です。 |
fairness(公平性) |
セマフォの公平性。デフォルト値は**false**です。 |
highConcurrencyStatus(高同時実行ステータス) |
セマフォから許可を取得できない場合に、クライアントに返されるエラー状態コード。値が正の場合にのみ適用されます。デフォルト値は **-1** で、エラー状態は返されません。 |
割り込み可能 |
許可が利用可能になるまでスレッドを割り込み可能にするかどうかを決定するフラグ。デフォルト値は **false** です。 |
ヘルスチェック Valve
はじめに
**ヘルスチェックバルブ**は、クラウドオーケストレーターのヘルスチェックに応答します。
属性
**ヘルスチェックバルブ**は、以下の設定属性をサポートします。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これは **org.apache.catalina.valves.HealthCheckValve** に設定する必要があります。 |
パス |
クラウドオーケストレーターのヘルスチェックロジックが使用するパス。バルブがコンテキストに関連付けられている場合、これはコンテキストパスからの相対パスになります。そうでない場合、バルブは完全なURIと一致します。デフォルト値は **health** です。 |
checkContainersAvailable |
|
永続 Valve
はじめに
リクエストごとのセッション永続性を実装する **PersistentValve** 。スティッキーでないロードバランサーで使用することを目的としています。
属性
**PersistentValve バルブ** は、以下の設定属性をサポートします。
属性 | 説明 |
---|---|
className |
使用する実装のJavaクラス名。これは **org.apache.catalina.valves.PersistentValve** に設定する必要があります。 |
フィルター |
既知のファイル拡張子またはURLの場合、このフィルターパターンを使用して、このリクエスト中にセッションが不要であることをバルブに通知できます。リクエストがこのフィルターパターンに一致する場合、バルブはセッションを復元する必要がないと見なします。フィルターの例は、 |
semaphoreAcquireUninterruptibly |
セッションごとのセマフォを待機してブロックするスレッドが、割り込み不可にするかどうかを決定するフラグ。 **semaphoreBlockOnAcquire** が |
semaphoreBlockOnAcquire |
別のスレッドによって保持されている場合に、セッションごとのセマフォを取得しようとするスレッドが、セマフォを取得できるまでブロックするか、待機中のリクエストを拒否するかどうかを決定するフラグ。指定しない場合、デフォルト値の |
semaphoreFairness |
セッションごとのセマフォが、セマフォのリクエストを受信した順序で許可するかどうかを決定するフラグ。 **semaphoreBlockOnAcquire** が |