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コンテナ(ContextHost、またはEngine)に関連付けることができ、そのコンテナによって処理されるすべての要求を記録します。

一部のリクエストは、コンテナに渡される前にTomcatによって処理される場合があります。これらには、/fooから/foo/へのリダイレクトや無効なリクエストの拒否が含まれます。Tomcatがリクエストを処理したであろうContextを識別できる場合、リクエスト/レスポンスは、関連付けられたContextHost、およびEngineAccessLogに記録されます。 Tomcatがリクエストを処理したであろうContextを識別できない場合(URLが無効な場合など)、Tomcatは最初にEngine、次にEngineのデフォルトHost、最後にデフォルトHostのROOT(またはデフォルト)ContextAccessLog実装を探します。 Tomcatは見つかった最初のAccessLog実装を使用して、コンテナに渡される前に拒否されたリクエストをログに記録します。

出力ファイルは、directory属性で指定されたディレクトリに配置されます。ファイルの名前は、設定されたprefix、タイムスタンプ、およびsuffixを連結して構成されます。ファイル名に含まれるタイムスタンプの形式は、fileDateFormat属性を使用して設定できます。 rotatablefalseに設定してファイルのローテーションをオフにすると、このタイムスタンプは省略されます。

警告:複数のAccessLogValveインスタンスを使用する場合は、異なる出力ファイルを使用するように設定する必要があります。

sendfileが使用される場合、レスポンスバイトは別のスレッドで非同期に書き込まれ、アクセスログvalveは実際に書き込まれたバイト数を認識しません。この場合、書き込みのためにsendfileスレッドに渡されたバイト数がアクセスログvalveに記録されます。

属性

アクセスログ Valveは、以下の設定属性をサポートしています。

属性説明
buffered

ロギングをバッファリングするかどうかを決定するフラグ。 falseに設定すると、アクセスログは各リクエストの後に書き込まれます。 デフォルト値:true

className

使用する実装のJavaクラス名。 デフォルトのアクセスログvalveを使用するには、これをorg.apache.catalina.valves.AccessLogValveに設定する必要があります。

condition

conditionUnlessと同じです。 この属性は、下位互換性のために提供されています。

conditionIf

条件付きロギングをオンにします。設定されている場合、ServletRequest.getAttribute()がnullでない場合にのみリクエストがログに記録されます。たとえば、この値がimportantに設定されている場合、特定のリクエストはServletRequest.getAttribute("important") != nullの場合にのみログに記録されます。 フィルターを使用すると、多くの異なるリクエストでServletRequestの属性を簡単に設定/設定解除できます。

conditionUnless

条件付きロギングをオンにします。設定されている場合、ServletRequest.getAttribute()がnullの場合にのみリクエストがログに記録されます。たとえば、この値が`junk`に設定されている場合、特定のリクエストは`ServletRequest.getAttribute("junk") == null`の場合にのみログに記録されます。 フィルターを使用すると、多くの異なるリクエストでServletRequestの属性を簡単に設定/設定解除できます。

directory

このvalveによって作成されたログファイルが配置されるディレクトリの絶対パスまたは相対パス名。相対パスが指定されている場合、$CATALINA_BASEからの相対パスとして解釈されます。 directory属性が指定されていない場合、デフォルト値は「logs」($CATALINA_BASEからの相対パス)です。

encoding

ログファイルの書き込みに使用される文字セット。空の文字列は、デフォルトの文字セットを使用することを意味します。 デフォルト値:UTF-8。

fileDateFormat

アクセスログファイル名でカスタマイズされたタイムスタンプを使用できます。フォーマットされたタイムスタンプが変更されるたびに、ファイルはローテーションされます。デフォルト値は.yyyy-MM-ddです。 1時間ごとにローテーションする場合は、この値を.yyyy-MM-dd.HHに設定します。日付形式は常にロケール`en_US`を使用してローカライズされます。

ipv6Canonical

IPv6アドレスをRFC 5952で定義されている標準表現形式で表すかどうかを決定するフラグ。 trueに設定すると、IPv6アドレスは標準形式(例:2001:db8::1:0:0:1::1)で書き込まれます。そうでない場合は、完全な形式(例:2001:db8:0:0:1:0:0:10:0:0:0:0:0:0:1)で表されます。 デフォルト値:false

locale

アクセスログ行のタイムスタンプのフォーマットに使用されるロケール。明示的なSimpleDateFormatパターン(%{xxx}t)を使用して設定されたタイムスタンプは、このロケールでフォーマットされます。デフォルトでは、Javaプロセスのデフォルトロケールが使用されます。 AccessLogValveの初期化後にロケールを切り替えることはサポートされていません。共通ログフォーマット(CLF)を使用するタイムスタンプは、常にロケール`en_US`でフォーマットされます。

maxDays

ローテーションされたアクセスログが削除されるまで保持される最大日数。指定しない場合、デフォルト値の`-1`が使用されます。これは、古いファイルを削除しないことを意味します。

maxLogMessageBufferSize

ログメッセージバッファは通常リサイクルされ、再利用されます。過剰なメモリ使用を防ぐために、バッファがこのサイズを超えて増加した場合、バッファは破棄されます。デフォルトは256文字です。これは、一般的なアクセスログメッセージサイズよりも大きく設定する必要があります。

pattern

リクエストとレスポンスからログに記録されるさまざまな情報フィールドを識別するフォーマットレイアウト、または標準フォーマットを選択するための単語`common`または`combined`。この属性の設定の詳細については、以下を参照してください。

prefix

各ログファイルの名前の先頭に追加されるプレフィックス。指定しない場合、デフォルト値は「access_log」です。

renameOnRotate

デフォルトでは、ローテーション可能なログの場合、アクティブなアクセスログファイル名には`fileDateFormat`の現在のタイムスタンプが含まれます。ローテーション中、ファイルは閉じられ、名前に次のタイムスタンプが付いた新しいファイルが作成されて使用されます。 `renameOnRotate`を`true`に設定すると、タイムスタンプはアクティブなログファイル名の一部ではなくなります。ローテーション中にのみファイルが閉じられ、タイムスタンプを含むように名前が変更されます。これは、時間ベースのローテーションを行う場合のほとんどのログフレームワークの動作と似ています。 デフォルト値:`false`

requestAttributesEnabled

リモートアドレス、リモートホスト、サーバーポート、およびプロトコルについてリクエストによって返される値をオーバーライドするために使用されるリクエスト属性(通常はRemoteIpValveなどによって設定される)の存在を確認するには、`true`に設定します。属性が設定されていないか、この属性が`false`に設定されている場合、リクエストからの値が使用されます。設定しない場合、デフォルト値の`false`が使用されます。

resolveHosts

この属性は、もはやサポートされていません。代わりに、コネクタ属性`enableLookups`を使用してください。

コネクタでenableLookupstrueに設定されていて、それを無視したい場合は、patternの値に%hの代わりに%aを使用してください。

rotatable(ローテーション可能)

ログのローテーションを行うかどうかを決定するフラグ。falseに設定すると、このファイルはローテーションされず、fileDateFormatは無視されます。デフォルト値:true

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で定義されている拡張ログファイル形式のワーキングドラフトに準拠したログファイルを作成することです。

属性

**拡張アクセスログバルブ**は、標準のアクセスログバルブのすべての構成属性をサポートします。classNamepatternに使用される値のみが異なります。

属性説明
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): getAuthType
  • x-H(characterEncoding): getCharacterEncoding
  • x-H(contentLength): getContentLength
  • x-H(locale): getLocale
  • x-H(protocol): getProtocol
  • x-H(remoteUser): getRemoteUser
  • x-H(requestedSessionId): getRequestedSessionId
  • x-H(requestedSessionIdFromCookie): isRequestedSessionIdFromCookie
  • x-H(requestedSessionIdValid): isRequestedSessionIdValid
  • x-H(scheme): getScheme
  • x-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アクセスログバルブ**は、アクセスログバルブを拡張するため、同じ自己完結型のロギングロジックを使用します。これは、同じファイル処理属性を実装していることを意味します。標準のAccessLogValveとの主な違いは、JsonAccessLogValveRFC 8259で定義されているJSON構文に従うログファイルを作成することです。

属性

**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テキストは無視されます。
サブオブジェクトを生成しないパターン識別子に使用されるJSONオブジェクトキーは次のとおりです。
  • %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
サブオブジェクトを生成するパターン識別子に使用されるJSONオブジェクトキーは次のとおりです。
  • %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ネットマスクまたはアドレスのリスト。この属性が指定されている場合、このリクエストが受け入れられるためには、リモートアドレスが一致してはいけません。この属性が指定されていない場合、リクエストの受け入れはaccept属性によってのみ制御されます。

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と一緒に使用すると、クライアントはこのCookie(および付随する値)を提示することで、このValveが何もしないようにすることができます。これにより、*disabled* ノードを再び有効にする前にプローブして、期待どおりに動作していることを確認できます。

ignoreCookieValue

ignoreCookieNameと一緒に使用すると、クライアントはCookie(および付随する値)を提示することで、このValveが何もしないようにすることができます。これにより、*disabled* ノードを再び有効にする前にプローブして、期待どおりに動作していることを確認できます。

リモートIP Valve

はじめに

mod_remoteipのTomcatポートであるこのValveは、リクエストの明らかなクライアントリモートIPアドレスとホスト名を、プロキシまたはロードバランサーによってリクエストヘッダー(例:「X-Forwarded-For」)を介して提示されたIPアドレスリストに置き換えます。

このバルブのもう1つの機能は、明らかなスキーム(http/https)、サーバーポート、およびrequest.secureを、プロキシまたはロードバランサーによってリクエストヘッダー(例:「X-Forwarded-Proto」)を介して提示されたスキームに置き換えることです。

このValveは、必要に応じてEngineHost、またはContextレベルで使用できます。通常、このValveはEngineレベルで使用されます。

リモートアドレス/ホストValveと組み合わせて使用する場合は、正しいクライアントIPアドレスがリモートアドレス/ホストValveに提示されるように、このValveを最初に定義する必要があります。

**注:** デフォルトでは、このValveはアクセスログに書き込まれる値に影響を与えません。リクエスト処理がValveを離れると元の値が復元され、これは常にアクセスログ記録よりも早く発生します。このValveによって設定されたリモートアドレス、リモートホスト、サーバーポート、およびプロトコルの値をアクセスログに渡すために、これらはリクエスト属性に配置されます。これらの値をここに公開することはデフォルトで有効になっていますが、AccessLogValveはそれらを使用するように明示的に構成する必要があります。 AccessLogValverequestAttributesEnabled属性のドキュメントを参照してください。

この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** は、BASIC認証を使用するように構成されたContextに自動的に追加されます。

デフォルト以外の設定が必要な場合は、必要な値を使用してContext要素内でValveを構成できます。

属性

**基本認証Valve** は、次の構成属性をサポートしています。

属性説明
allowCorsPreflight

CORS プリフライトリクエストと思われるリクエストが、CORS 仕様で要求されるように、認証者をバイパスすることを許可するかどうか。許可される値は neverfilteralways です。never は、CORS プリフライトリクエストのように見えても、リクエストが認証をバイパスしないことを意味します。filter は、リクエストが CORS プリフライトリクエストのように見え、CORS フィルターが有効になっており、/* にマッピングされている Web アプリケーションにマッピングされている場合、リクエストが認証をバイパスすることを意味します。always は、CORS プリフライトリクエストのように見えるすべてのリクエストが認証をバイパスすることを意味します。設定しない場合、デフォルト値は never です。

alwaysUseSession

ユーザーが認証されたら、常にセッションを使用する必要があるかどうか。認証されたプリンシパルをキャッシュするためにセッションを使用できるため、パフォーマンスが向上する可能性があります。そのため、すべてのリクエストでレルムを介してユーザーを認証する必要がなくなります。これは、JNDI レルムまたはデータソースレルムと組み合わせて BASIC 認証を使用する場合などに役立ちます。ただし、セッションの作成と GC に伴うパフォーマンスコストも発生します。設定しない場合、デフォルト値の false が使用されます。

cache

リクエストが HTTP セッションの一部である場合、認証されたプリンシパルをキャッシュする必要があるかどうか。指定しない場合、デフォルト値の true が使用されます。

changeSessionIdOnAuthentication

ユーザーが認証された時点でセッションが存在する場合、セッション ID を変更するかどうかを制御します。これは、セッション固定攻撃を防ぐためです。設定しない場合、デフォルト値の true が使用されます。

charset

RFC 7617 に従って、WWW-Authenticate HTTP ヘッダーに charset 認証パラメーターを含めるかどうかを制御します。許可されるオプションは、null、空の文字列、および UTF-8 のみです。UTF-8 が指定されている場合、charset 認証パラメーターはその値で送信され、提供されたユーザー名とオプションのパスワードは UTF-8 を使用してバイトから文字に変換されます。それ以外の場合、charset 認証パラメーターは送信されず、提供されたユーザー名とオプションのパスワードは ISO-8859-1 を使用してバイトから文字に変換されます。デフォルト値は null です。

className

使用する実装の Java クラス名。これは org.apache.catalina.authenticator.BasicAuthenticator に設定する必要があります。

disableProxyCaching

セキュリティ制約によって保護されているページのキャッシュを制御します。これを false に設定すると、一部のブラウザのキャッシュの問題を回避できますが、セキュリティで保護されたページがプロキシによってキャッシュされるため、ほぼ確実にセキュリティ上の問題が発生します。securePagesWithPragma は、ブラウザのキャッシュの問題に対する代替の安全な回避策を提供します。設定しない場合、デフォルト値の true が使用されます。

jaspicCallbackHandlerClass

JASPIC が使用する必要がある javax.security.auth.callback.CallbackHandler 実装の Java クラスの名前。何も指定されていない場合は、デフォルトの org.apache.catalina.authenticator.jaspic.CallbackHandlerImpl が使用されます。

securePagesWithPragma

セキュリティ制約によって保護されているページのキャッシュを制御します。これを false に設定すると、デフォルトの Pragma: No-cache および Cache-control: No-cache ではなく Cache-Control: private を使用することで、一部のブラウザのキャッシュの問題を回避できます。設定しない場合、デフォルト値の false が使用されます。

secureRandomAlgorithm

セッション ID を生成する java.security.SecureRandom インスタンスを作成するために使用するアルゴリズムの名前。無効なアルゴリズムまたはプロバイダーが指定されている場合、プラットフォームのデフォルトプロバイダーとデフォルトアルゴリズムが使用されます。指定しない場合、デフォルトアルゴリズムの SHA1PRNG が使用されます。デフォルトアルゴリズムがサポートされていない場合は、プラットフォームのデフォルトが使用されます。プラットフォームのデフォルトを使用するように指定するには、secureRandomProvider 属性を設定せず、この属性を空の文字列に設定します。

secureRandomClass

SSO セッション ID を生成するために使用する java.security.SecureRandom を拡張する Java クラスの名前。指定しない場合、デフォルト値は java.security.SecureRandom です。

secureRandomProvider

SSO セッション ID を生成する java.security.SecureRandom インスタンスを作成するために使用するプロバイダーの名前。無効なアルゴリズムまたはプロバイダーが指定されている場合、プラットフォームのデフォルトプロバイダーとデフォルトアルゴリズムが使用されます。指定しない場合、プラットフォームのデフォルトプロバイダーが使用されます。

sendAuthInfoResponseHeaders

転送/プロキシされたリクエストのレスポンスヘッダーとして認証情報(リモートユーザーと認証タイプ)を返すかどうかを制御します。RemoteIpValve または RemoteIpFilterGlobals.REQUEST_FORWARDED_ATTRIBUTE で転送されたリクエストをマークすると、この認証者は HttpServletRequest.getRemoteUser() および HttpServletRequest.getAuthType() の値をレスポンスヘッダー remote-user および auth-type としてリバースプロキシに返すことができます。これは、たとえば、アクセスログの整合性やその他の決定を行う場合に役立ちます。指定しない場合、デフォルト値は false です。

trimCredentials

解析された資格情報から先頭または末尾の空白を削除するかどうかを制御します。指定しない場合、デフォルト値は false です。

注: この属性は Tomcat 11 以降で削除されます。

Digest 認証 Valve

はじめに

ダイジェスト認証バルブ は、DIGEST 認証を使用するように構成された コンテキスト に自動的に追加されます。

デフォルト以外の設定が必要な場合は、必要な値を使用してContext要素内でValveを構成できます。

属性

ダイジェスト認証バルブ は、次の構成属性をサポートしています。

属性説明
algorithms

認証プロセスに使用されるダイジェストアルゴリズムのカンマ区切りリスト。アルゴリズムは、Java 標準名または RFC 7616 で使用される名前を使用して指定できます。指定しない場合、デフォルト値の SHA-256,MD5 が使用されます。

allowCorsPreflight

CORS プリフライトリクエストと思われるリクエストが、CORS 仕様で要求されるように、認証者をバイパスすることを許可するかどうか。許可される値は neverfilteralways です。never は、CORS プリフライトリクエストのように見えても、リクエストが認証をバイパスしないことを意味します。filter は、リクエストが CORS プリフライトリクエストのように見え、CORS フィルターが有効になっており、/* にマッピングされている Web アプリケーションにマッピングされている場合、リクエストが認証をバイパスすることを意味します。always は、CORS プリフライトリクエストのように見えるすべてのリクエストが認証をバイパスすることを意味します。設定しない場合、デフォルト値は never です。

alwaysUseSession

ユーザーが認証されたら、常にセッションを使用する必要があるかどうか。認証されたプリンシパルをキャッシュするためにセッションを使用できるため、パフォーマンスが向上する可能性があります。そのため、すべてのリクエストでレルムを介してユーザーを認証する必要がなくなります。これは、JNDI レルムまたはデータソースレルムと組み合わせて BASIC 認証を使用する場合などに役立ちます。ただし、セッションの作成と GC に伴うパフォーマンスコストも発生します。設定しない場合、デフォルト値の false が使用されます。

cache

リクエストが HTTP セッションの一部である場合、認証されたプリンシパルをキャッシュする必要があるかどうか。指定しない場合、デフォルト値の false が使用されます。

changeSessionIdOnAuthentication

ユーザーが認証された時点でセッションが存在する場合、セッション ID を変更するかどうかを制御します。これは、セッション固定攻撃を防ぐためです。設定しない場合、デフォルト値の true が使用されます。

className

使用する実装の Java クラス名。これは org.apache.catalina.authenticator.DigestAuthenticator に設定する必要があります。

disableProxyCaching

セキュリティ制約によって保護されているページのキャッシュを制御します。これを false に設定すると、一部のブラウザのキャッシュの問題を回避できますが、セキュリティで保護されたページがプロキシによってキャッシュされるため、ほぼ確実にセキュリティ上の問題が発生します。securePagesWithPragma は、ブラウザのキャッシュの問題に対する代替の安全な回避策を提供します。設定しない場合、デフォルト値の true が使用されます。

jaspicCallbackHandlerClass

JASPIC が使用する必要がある javax.security.auth.callback.CallbackHandler 実装の Java クラスの名前。何も指定されていない場合は、デフォルトの org.apache.catalina.authenticator.jaspic.CallbackHandlerImpl が使用されます。

key

ダイジェスト認証で使用される秘密鍵。設定されていない場合は、安全なランダム値が生成されます。これは通常、サーバーの再起動時またはクラスタ全体でキー値を一定に保つ必要がある場合にのみ設定する必要があります。

nonceCacheSize

リプレイ攻撃から保護するため、DIGEST 認証子はサーバー nonce と nonce カウント値を追跡します。この属性は、そのキャッシュのサイズを制御します。指定しない場合、デフォルト値の 1000 が使用されます。

nonceCountWindowSize

クライアントリクエストは順序どおりに処理されない場合があり、そのため nonce カウント値が順序どおりに処理されない場合があります。nonce カウントが順序どおりに提示された場合の認証エラーを防ぐため、認証子は nonce カウント値のウィンドウを追跡します。この属性は、そのウィンドウの大きさを制御します。指定しない場合、デフォルト値の 100 が使用されます。

nonceValidity

サーバーで生成された nonce が認証に使用できる有効期間(ミリ秒単位)。指定しない場合、デフォルト値の 300000(5 分)が使用されます。

opaque

ダイジェスト認証で使用される opaque サーバー文字列。設定されていない場合は、ランダム値が生成されます。これは通常、サーバーの再起動時またはクラスタ全体で opaque 値を一定に保つ必要がある場合にのみ設定する必要があります。

securePagesWithPragma

セキュリティ制約によって保護されているページのキャッシュを制御します。これを false に設定すると、デフォルトの Pragma: No-cache および Cache-control: No-cache ではなく Cache-Control: private を使用することで、一部のブラウザのキャッシュの問題を回避できます。設定しない場合、デフォルト値の false が使用されます。

secureRandomAlgorithm

セッション ID を生成する java.security.SecureRandom インスタンスを作成するために使用するアルゴリズムの名前。無効なアルゴリズムまたはプロバイダーが指定されている場合、プラットフォームのデフォルトプロバイダーとデフォルトアルゴリズムが使用されます。指定しない場合、デフォルトアルゴリズムの SHA1PRNG が使用されます。デフォルトアルゴリズムがサポートされていない場合は、プラットフォームのデフォルトが使用されます。プラットフォームのデフォルトを使用するように指定するには、secureRandomProvider 属性を設定せず、この属性を空の文字列に設定します。

secureRandomClass

SSO セッション ID を生成するために使用する java.security.SecureRandom を拡張する Java クラスの名前。指定しない場合、デフォルト値は java.security.SecureRandom です。

secureRandomProvider

SSO セッション ID を生成する java.security.SecureRandom インスタンスを作成するために使用するプロバイダーの名前。無効なアルゴリズムまたはプロバイダーが指定されている場合、プラットフォームのデフォルトプロバイダーとデフォルトアルゴリズムが使用されます。指定しない場合、プラットフォームのデフォルトプロバイダーが使用されます。

sendAuthInfoResponseHeaders

転送/プロキシされたリクエストのレスポンスヘッダーとして認証情報(リモートユーザーと認証タイプ)を返すかどうかを制御します。RemoteIpValve または RemoteIpFilterGlobals.REQUEST_FORWARDED_ATTRIBUTE で転送されたリクエストをマークすると、この認証者は HttpServletRequest.getRemoteUser() および HttpServletRequest.getAuthType() の値をレスポンスヘッダー remote-user および auth-type としてリバースプロキシに返すことができます。これは、たとえば、アクセスログの整合性やその他の決定を行う場合に役立ちます。指定しない場合、デフォルト値は false です。

validateUri

RFC2617 で要求されているように、URI を検証する必要があるかどうか。指定しない場合、デフォルト値の true が使用されます。これは通常、Tomcat がリバースプロキシの背後にあり、プロキシが Tomcat に渡される URI を変更して DIGEST 認証が常に失敗する場合にのみ設定する必要があります。

Form 認証 Valve

はじめに

フォーム認証バルブ は、FORM 認証を使用するように構成された コンテキスト に自動的に追加されます。

デフォルト以外の設定が必要な場合は、必要な値を使用してContext要素内でValveを構成できます。

属性

フォーム認証バルブ は、次の構成属性をサポートしています。

属性説明
allowCorsPreflight

CORS プリフライトリクエストと思われるリクエストが、CORS 仕様で要求されるように、認証者をバイパスすることを許可するかどうか。許可される値は neverfilteralways です。never は、CORS プリフライトリクエストのように見えても、リクエストが認証をバイパスしないことを意味します。filter は、リクエストが CORS プリフライトリクエストのように見え、CORS フィルターが有効になっており、/* にマッピングされている Web アプリケーションにマッピングされている場合、リクエストが認証をバイパスすることを意味します。always は、CORS プリフライトリクエストのように見えるすべてのリクエストが認証をバイパスすることを意味します。設定しない場合、デフォルト値は never です。

authenticationSessionTimeout

認証プロセスでセッションが作成される場合、これは認証プロセス中の最大セッションタイムアウト(秒単位)です。認証が完了すると、デフォルトのセッションタイムアウトが適用されます。認証プロセスが開始される前に存在するセッションは、全体を通して元のセッションタイムアウトを保持します。設定しない場合、デフォルト値の 120 秒が使用されます。

changeSessionIdOnAuthentication

ユーザーが認証された時点でセッションが存在する場合、セッション ID を変更するかどうかを制御します。これは、セッション固定攻撃を防ぐためです。設定しない場合、デフォルト値の true が使用されます。

characterEncoding

リクエストからユーザー名とパスワードのパラメーターを読み取るために使用する文字エンコーディング。設定されていない場合は、リクエスト本文のエンコーディングが使用されます。

className

使用する実装の Java クラス名。これは **org.apache.catalina.authenticator.FormAuthenticator** に設定する必要があります。

disableProxyCaching

セキュリティ制約によって保護されているページのキャッシュを制御します。これを false に設定すると、一部のブラウザのキャッシュの問題を回避できますが、セキュリティで保護されたページがプロキシによってキャッシュされるため、ほぼ確実にセキュリティ上の問題が発生します。securePagesWithPragma は、ブラウザのキャッシュの問題に対する代替の安全な回避策を提供します。設定しない場合、デフォルト値の true が使用されます。

jaspicCallbackHandlerClass

JASPIC が使用する必要がある javax.security.auth.callback.CallbackHandler 実装の Java クラスの名前。何も指定されていない場合は、デフォルトの org.apache.catalina.authenticator.jaspic.CallbackHandlerImpl が使用されます。

landingPage

ログインページを直接リクエストしたり、ログインを長時間遅らせてセッションが期限切れになったりするなど、FORM 認証プロセスが誤用された場合の動作を制御します。この属性が設定されている場合、エラーレスポンスコードを返すのではなく、有効な資格情報でログインフォームが送信された場合、Tomcat はユーザーを指定されたランディングページにリダイレクトします。ログインを処理するには、ランディングページが保護されたリソース(つまり、認証が必要なリソース)である必要があります。ランディングページに認証が必要ない場合、ユーザーはログインせず、保護されたページにアクセスしたときに資格情報の入力を再び求められます。

securePagesWithPragma

セキュリティ制約によって保護されているページのキャッシュを制御します。これを false に設定すると、デフォルトの Pragma: No-cache および Cache-control: No-cache ではなく Cache-Control: private を使用することで、一部のブラウザのキャッシュの問題を回避できます。設定しない場合、デフォルト値の false が使用されます。

secureRandomAlgorithm

セッション ID を生成する java.security.SecureRandom インスタンスを作成するために使用するアルゴリズムの名前。無効なアルゴリズムまたはプロバイダーが指定されている場合、プラットフォームのデフォルトプロバイダーとデフォルトアルゴリズムが使用されます。指定しない場合、デフォルトアルゴリズムの SHA1PRNG が使用されます。デフォルトアルゴリズムがサポートされていない場合は、プラットフォームのデフォルトが使用されます。プラットフォームのデフォルトを使用するように指定するには、secureRandomProvider 属性を設定せず、この属性を空の文字列に設定します。

secureRandomClass

SSO セッション ID を生成するために使用する java.security.SecureRandom を拡張する Java クラスの名前。指定しない場合、デフォルト値は java.security.SecureRandom です。

secureRandomProvider

SSO セッション ID を生成する java.security.SecureRandom インスタンスを作成するために使用するプロバイダーの名前。無効なアルゴリズムまたはプロバイダーが指定されている場合、プラットフォームのデフォルトプロバイダーとデフォルトアルゴリズムが使用されます。指定しない場合、プラットフォームのデフォルトプロバイダーが使用されます。

sendAuthInfoResponseHeaders

転送/プロキシされたリクエストのレスポンスヘッダーとして認証情報(リモートユーザーと認証タイプ)を返すかどうかを制御します。RemoteIpValve または RemoteIpFilterGlobals.REQUEST_FORWARDED_ATTRIBUTE で転送されたリクエストをマークすると、この認証者は HttpServletRequest.getRemoteUser() および HttpServletRequest.getAuthType() の値をレスポンスヘッダー remote-user および auth-type としてリバースプロキシに返すことができます。これは、たとえば、アクセスログの整合性やその他の決定を行う場合に役立ちます。指定しない場合、デフォルト値は false です。

SSL 認証 Valve

はじめに

SSL 認証バルブ は、SSL 認証を使用するように構成された コンテキスト に自動的に追加されます。

デフォルト以外の設定が必要な場合は、必要な値を使用してContext要素内でValveを構成できます。

属性

SSL 認証バルブ は、次の構成属性をサポートしています。

属性説明
allowCorsPreflight

CORS プリフライトリクエストと思われるリクエストが、CORS 仕様で要求されるように、認証者をバイパスすることを許可するかどうか。許可される値は neverfilteralways です。never は、CORS プリフライトリクエストのように見えても、リクエストが認証をバイパスしないことを意味します。filter は、リクエストが CORS プリフライトリクエストのように見え、CORS フィルターが有効になっており、/* にマッピングされている Web アプリケーションにマッピングされている場合、リクエストが認証をバイパスすることを意味します。always は、CORS プリフライトリクエストのように見えるすべてのリクエストが認証をバイパスすることを意味します。設定しない場合、デフォルト値は never です。

cache

リクエストが HTTP セッションの一部である場合、認証されたプリンシパルをキャッシュする必要があるかどうか。指定しない場合、デフォルト値の true が使用されます。

className

使用する実装の Java クラス名。これは **org.apache.catalina.authenticator.SSLAuthenticator** に設定する必要があります。

changeSessionIdOnAuthentication

ユーザーが認証された時点でセッションが存在する場合、セッション ID を変更するかどうかを制御します。これは、セッション固定攻撃を防ぐためです。設定しない場合、デフォルト値の true が使用されます。

disableProxyCaching

セキュリティ制約によって保護されているページのキャッシュを制御します。これを false に設定すると、一部のブラウザのキャッシュの問題を回避できますが、セキュリティで保護されたページがプロキシによってキャッシュされるため、ほぼ確実にセキュリティ上の問題が発生します。securePagesWithPragma は、ブラウザのキャッシュの問題に対する代替の安全な回避策を提供します。設定しない場合、デフォルト値の true が使用されます。

jaspicCallbackHandlerClass

JASPIC が使用する必要がある javax.security.auth.callback.CallbackHandler 実装の Java クラスの名前。何も指定されていない場合は、デフォルトの org.apache.catalina.authenticator.jaspic.CallbackHandlerImpl が使用されます。

securePagesWithPragma

セキュリティ制約によって保護されているページのキャッシュを制御します。これを false に設定すると、デフォルトの Pragma: No-cache および Cache-control: No-cache ではなく Cache-Control: private を使用することで、一部のブラウザのキャッシュの問題を回避できます。設定しない場合、デフォルト値の false が使用されます。

secureRandomAlgorithm

セッション ID を生成する java.security.SecureRandom インスタンスを作成するために使用するアルゴリズムの名前。無効なアルゴリズムまたはプロバイダーが指定されている場合、プラットフォームのデフォルトプロバイダーとデフォルトアルゴリズムが使用されます。指定しない場合、デフォルトアルゴリズムの SHA1PRNG が使用されます。デフォルトアルゴリズムがサポートされていない場合は、プラットフォームのデフォルトが使用されます。プラットフォームのデフォルトを使用するように指定するには、secureRandomProvider 属性を設定せず、この属性を空の文字列に設定します。

secureRandomClass

SSO セッション ID を生成するために使用する java.security.SecureRandom を拡張する Java クラスの名前。指定しない場合、デフォルト値は java.security.SecureRandom です。

secureRandomProvider

SSO セッション ID を生成する java.security.SecureRandom インスタンスを作成するために使用するプロバイダーの名前。無効なアルゴリズムまたはプロバイダーが指定されている場合、プラットフォームのデフォルトプロバイダーとデフォルトアルゴリズムが使用されます。指定しない場合、プラットフォームのデフォルトプロバイダーが使用されます。

SPNEGO Valve

はじめに

SPNEGO 認証バルブ は、SPNEGO 認証を使用するように構成された コンテキスト に自動的に追加されます。

デフォルト以外の設定が必要な場合は、必要な値を使用してContext要素内でValveを構成できます。

属性

SPNEGO 認証バルブ は、次の構成属性をサポートしています。

属性説明
allowCorsPreflight

CORS プリフライトリクエストと思われるリクエストが、CORS 仕様で要求されるように、認証者をバイパスすることを許可するかどうか。許可される値は neverfilteralways です。never は、CORS プリフライトリクエストのように見えても、リクエストが認証をバイパスしないことを意味します。filter は、リクエストが CORS プリフライトリクエストのように見え、リクエストがマッピングされている Web アプリケーションで CORS フィルター が有効になっており、/* にマッピングされている場合、リクエストが認証をバイパスすることを意味します。always は、CORS プリフライトリクエストのように見えるすべてのリクエストが認証をバイパスすることを意味します。設定しない場合、デフォルト値は never です。

alwaysUseSession

ユーザーが認証されたら、常にセッションを使用する必要があるかどうか。認証されたプリンシパルをキャッシュするためにセッションを使用できるため、パフォーマンスが向上する可能性があります。そのため、すべてのリクエストでユーザーを認証する必要がなくなります。これは、サーバーが認証済みユーザーをキャッシュすると想定しているクライアントにも役立ちます。ただし、セッションの作成と GC に伴うパフォーマンスコストも発生します。代替ソリューションについては、noKeepAliveUserAgents を参照してください。設定しない場合、デフォルト値の false が使用されます。

applyJava8u40Fix

Java 8 update 40 ( JDK-8048194) 以降に導入された修正により、Windows 2008 R2 サーバーで Tomcat を実行している IE の SPNEGO 認証が壊れました。このオプションは、SPNEGO 認証が引き続き機能することを可能にする回避策を有効にします。回避策は他の構成に影響を与えるべきではないため、デフォルトで有効になっています。必要に応じて、この属性を false に設定することで回避策を無効にすることができます。

cache

リクエストが HTTP セッションの一部である場合、認証されたプリンシパルをキャッシュする必要があるかどうか。指定しない場合、デフォルト値の true が使用されます。

className

使用する実装の Java クラス名。これは **org.apache.catalina.authenticator.SpnegoAuthenticator** に設定する必要があります。

changeSessionIdOnAuthentication

ユーザーが認証された時点でセッションが存在する場合、セッション ID を変更するかどうかを制御します。これは、セッション固定攻撃を防ぐためです。設定しない場合、デフォルト値の true が使用されます。

disableProxyCaching

セキュリティ制約によって保護されているページのキャッシュを制御します。これを false に設定すると、一部のブラウザのキャッシュの問題を回避できますが、セキュリティで保護されたページがプロキシによってキャッシュされるため、ほぼ確実にセキュリティ上の問題が発生します。securePagesWithPragma は、ブラウザのキャッシュの問題に対する代替の安全な回避策を提供します。設定しない場合、デフォルト値の true が使用されます。

jaspicCallbackHandlerClass

JASPIC が使用する必要がある javax.security.auth.callback.CallbackHandler 実装の Java クラスの名前。何も指定されていない場合は、デフォルトの org.apache.catalina.authenticator.jaspic.CallbackHandlerImpl が使用されます。

loginConfigName(ログイン設定名)

サービスとしてログインするために使用されるJAASログイン設定の名前です。指定しない場合、デフォルトのcom.sun.security.jgss.krb5.acceptが使用されます。

noKeepAliveUserAgents(キープアライブ無効ユーザーエージェント)

一部のクライアント(ほとんどのブラウザではありません)は、サーバーが接続の認証済みユーザー情報をキャッシュし、すべてのリクエストで資格情報を再送信しないことを期待しています。Tomcatは、HTTPセッションが利用可能な場合を除き、これを実行しません。セッションは、アプリケーションがセッションを作成するか、この認証器でalwaysUseSessionが有効になっている場合に利用可能です。

セッションを作成する代わりに、この属性を使用して、HTTPキープアライブが無効になっているユーザーエージェントを定義できます。これは、接続が単一のリクエストにのみ使用されるため、接続ごとに認証済みユーザー情報をキャッシュする機能がないことを意味します。HTTPキープアライブを無効にすると、パフォーマンスコストが発生します。

この属性は、ユーザーエージェント文字列全体に一致する正規表現である必要があります(例:.*Chrome.*)。指定しない場合、正規表現は定義されず、HTTPキープアライブが無効になるユーザーエージェントはありません。

securePagesWithPragma

セキュリティ制約によって保護されているページのキャッシュを制御します。これを false に設定すると、デフォルトの Pragma: No-cache および Cache-control: No-cache ではなく Cache-Control: private を使用することで、一部のブラウザのキャッシュの問題を回避できます。設定しない場合、デフォルト値の false が使用されます。

secureRandomAlgorithm

セッション ID を生成する java.security.SecureRandom インスタンスを作成するために使用するアルゴリズムの名前。無効なアルゴリズムまたはプロバイダーが指定されている場合、プラットフォームのデフォルトプロバイダーとデフォルトアルゴリズムが使用されます。指定しない場合、デフォルトアルゴリズムの SHA1PRNG が使用されます。デフォルトアルゴリズムがサポートされていない場合は、プラットフォームのデフォルトが使用されます。プラットフォームのデフォルトを使用するように指定するには、secureRandomProvider 属性を設定せず、この属性を空の文字列に設定します。

secureRandomClass

SSO セッション ID を生成するために使用する java.security.SecureRandom を拡張する Java クラスの名前。指定しない場合、デフォルト値は java.security.SecureRandom です。

secureRandomProvider

SSO セッション ID を生成する java.security.SecureRandom インスタンスを作成するために使用するプロバイダーの名前。無効なアルゴリズムまたはプロバイダーが指定されている場合、プラットフォームのデフォルトプロバイダーとデフォルトアルゴリズムが使用されます。指定しない場合、プラットフォームのデフォルトプロバイダーが使用されます。

sendAuthInfoResponseHeaders

転送/プロキシされたリクエストのレスポンスヘッダーとして認証情報(リモートユーザーと認証タイプ)を返すかどうかを制御します。RemoteIpValve または RemoteIpFilterGlobals.REQUEST_FORWARDED_ATTRIBUTE で転送されたリクエストをマークすると、この認証者は HttpServletRequest.getRemoteUser() および HttpServletRequest.getAuthType() の値をレスポンスヘッダー remote-user および auth-type としてリバースプロキシに返すことができます。これは、たとえば、アクセスログの整合性やその他の決定を行う場合に役立ちます。指定しない場合、デフォルト値は false です。

storeDelegatedCredential(委任された資格情報の保存)

ユーザーの委任された資格情報をユーザーPrincipalに格納するかどうかを制御します。使用可能な場合、委任された資格情報は、org.apache.catalina.realm.GSS_CREDENTIALリクエスト属性を介してアプリケーション(外部サービスへの認証など)で利用できます。設定されていない場合、デフォルト値のtrueが使用されます。

エラーレポート Valve

はじめに

**エラーレポートバルブ**は、HTMLエラーページを生成して返す、HTTPステータスコード用のシンプルなエラーハンドラーです。特定のステータスコードや例外タイプに対して、事前に定義された静的HTMLページを返すように設定することもできます。

**注:** showServerInfoとshowReportの両方を無効にすると、HTTPステータスコードのみが返されます。

属性

**エラーレポートバルブ**は、以下の設定属性をサポートしています。

属性説明
className

使用する実装のJavaクラス名。デフォルトのエラーレポートバルブを使用するには、これを**org.apache.catalina.valves.ErrorReportValve**に設定する**必要があります**。

errorCode.nnn

nnnで表されるHTTPエラーコードに対して返される、UTF-8エンコードされたHTMLファイルの場所。たとえば、errorCode.404は、HTTP 404エラーに対して返されるファイルを指定します。場所は相対パスまたは絶対パスです。相対パスの場合は、$CATALINA_BASEからの相対パスである必要があります。特殊値errorCode.0を使用して、ステータスコードにエラーページが定義されていない場合に使用されるデフォルトのエラーページを定義できます。一致するエラーページが見つからない場合は、デフォルトの**エラーレポートバルブ**レスポンスが返されます。

exceptionType.fullyQualifiedClassName(例外タイプ.完全修飾クラス名)

エラーが発生し、jakarta.servlet.error.exceptionリクエスト属性がfullyQualifiedClassNameのインスタンスまたはそのサブクラスに設定されている場合に返される、UTF-8エンコードされたHTMLファイルの場所。たとえば、errorCode.java.io.IOExceptionは、IOExceptionに対して返されるファイルを指定します。場所は相対パスまたは絶対パスです。相対パスの場合は、$CATALINA_BASEからの相対パスである必要があります。一致するエラーページが見つからない場合は、デフォルトの**エラーレポートバルブ**レスポンスが返されます。

showReport(レポートの表示)

エラーが発生した場合にエラーレポート(カスタムエラーメッセージまたはスタックトレース)を表示するかどうかを決定するフラグ。falseに設定すると、エラーレポートはHTMLレスポンスに返されません。デフォルト値:true

showServerInfo(サーバー情報の表示)

エラーが発生した場合にサーバー情報を表示するかどうかを決定するフラグ。falseに設定すると、サーバーバージョンはHTMLレスポンスに返されません。デフォルト値:true

JSON エラーレポート Valve

はじめに

**JSONエラーレポートバルブ**は、JSONエラーメッセージを返すHTTPステータスコード用のシンプルなエラーハンドラーです。

HosterrorReportValveClass属性でこのクラスを指定することにより、ErrorReportValveの代わりに使用され、HTMLの代わりにJSONレスポンスが返されます。

属性

**JSONエラーレポートバルブ**は、以下の設定属性をサポートしています。

属性説明
className

使用する実装のJavaクラス名。これは**org.apache.catalina.valves.JsonErrorReportValve**に設定する**必要があります**。

プロキシエラーレポート Valve

はじめに

**プロキシエラーレポートバルブ**は、エラーレポートの生成を担当する別の場所にリダイレクトまたはプロキシするHTTPステータスコード用のシンプルなエラーハンドラーです。

HosterrorReportValveClass属性でこのクラスを指定することにより、デフォルトの属性値を持つErrorReportValveの代わりに使用されます。属性を設定するには、Host要素内にネストされたバルブを定義できます。

属性

**プロキシエラーレポートバルブ**は、以下の設定属性をサポートしています。

属性説明
className

使用する実装のJavaクラス名。これは**org.apache.catalina.valves.ProxyErrorReportValve**に設定する**必要があります**。

usePropertiesFile(プロパティファイルの使用)

trueの場合、バルブは以下で説明するプロパティファイルを使用して、URLをステータスコードに関連付けます。falseの場合、デフォルトのErrorReportValveの設定メカニズムが代わりに使用されます。デフォルト値はfalseです。

useRedirect(リダイレクトの使用)

trueの場合、バルブはURLにリダイレクトを送信します。falseの場合、バルブは代わりに指定されたURLからコンテンツをプロキシします。デフォルト値はtrueです。

設定

**プロキシエラーレポートバルブ**は、クラスパスからリソースファイル**ProxyErrorReportValve.properties**を使用できます。各エントリはstatusCode = baseUrlです。 baseUrlには、自動的に追加されるURLパラメータ、statusCode、statusDescription、requestUri、およびthrowableを含めないでください。 0という名前の特別なキーを使用して、他のマップされていないコードをリダイレクトまたはプロキシURLに一致させる必要があります。

Crawler セッションマネージャ Valve

はじめに

Webクローラーは、サイトをクロールする際に数千ものセッションの作成をトリガーする可能性があり、 znacz量のメモリ消費が発生する可能性があります。このバルブは、リクエストでセッショントークンを提供するかどうかに関係なく、クローラーが通常のユーザーと同様に単一のセッションに関連付けられるようにします。

このValveは、必要に応じてEngineHost、またはContextレベルで使用できます。通常、このValveはEngineレベルで使用されます。

リモートIPバルブと組み合わせて使用​​する場合、このバルブに正しいクライアントIPアドレスが表示されるように、このバルブの前にリモートIPバルブを定義する必要があります。

属性

**クローラセッションマネージャバルブ**は、以下の設定属性をサポートしています。

属性説明
className

使用する実装のJavaクラス名。これは**org.apache.catalina.valves.CrawlerSessionManagerValve**に設定する**必要があります**。

contextAware(コンテキスト認識)

クライアントIPとともにコンテキスト名を使用して、再利用するセッションを識別するフラグ。 hostAwareと組み合わせることができます。デフォルト値:true

crawlerIps(クローラーIP)

リクエストがWebクローラーからのものであるかどうかを判断するために、クライアントIPが照合される正規表現(java.util.regexを使用)。デフォルトでは、このような正規表現は設定されていません。

crawlerUserAgents(クローラーユーザーエージェント)

リクエストがWebクローラーからのものであるかどうかを判断するために、ユーザーエージェントHTTPリクエストヘッダーが照合される正規表現(java.util.regexを使用)。設定されていない場合、デフォルトの.*[bB]ot.*|.*Yahoo! Slurp.*|.*Feedfetcher-Google.*が使用されます。

hostAware(ホスト認識)

設定されたホストをクライアントIPとともに使用して、再利用するセッションを識別するフラグ。 contextAwareと組み合わせることができます。デフォルト値:true

sessionInactiveInterval(セッション非アクティブ間隔)

クローラセッションマネージャバルブがクライアントからのアクティビティなしでクライアントIPとセッションIDのマッピングをメモリに保持する必要がある最小時間(秒単位)。クライアントIP /セッションキャッシュは、この間隔よりも長く非アクティブであったマッピングを定期的にパージします。指定しない場合、デフォルト値の60が使用されます。

スタックスレッド検出 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に設定すると、検出は無効になります。

注:検出(およびオプションの中断)は、このバルブを宣言するコンテナ(エンジン、ホスト、またはコンテキスト)のバックグラウンドスレッドで行われるため、しきい値はこのコンテナのbackgroundProcessorDelayよりも高くする必要があります。

interruptThreadThreshold(スレッド中断しきい値)

スタックスレッドを中断して「解放」を試みるまでの最小期間(秒単位)。

スレッドのスタックが解除されるという保証はないことに注意してください。これは通常、I / Oまたはロックでスタックしたスレッドではうまく機能しますが、無限ループの場合はおそらく役に立ちません。

デフォルトは-1で、この機能は無効になります。有効にするには、値をthreshold以上にする必要があります。

セマフォ 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

true の場合、バルブは関連付けられたコンテナとそのすべての子が利用可能かどうかを確認します。デフォルト値は **true** です。

永続 Valve

はじめに

リクエストごとのセッション永続性を実装する **PersistentValve** 。スティッキーでないロードバランサーで使用することを目的としています。

属性

**PersistentValve バルブ** は、以下の設定属性をサポートします。

属性説明
className

使用する実装のJavaクラス名。これは **org.apache.catalina.valves.PersistentValve** に設定する必要があります。

フィルター

既知のファイル拡張子またはURLの場合、このフィルターパターンを使用して、このリクエスト中にセッションが不要であることをバルブに通知できます。リクエストがこのフィルターパターンに一致する場合、バルブはセッションを復元する必要がないと見なします。フィルターの例は、 filter=".*\.gif|.*\.js|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt" のようになります。フィルターは java.util.regex を使用した正規表現です。

semaphoreAcquireUninterruptibly

セッションごとのセマフォを待機してブロックするスレッドが、割り込み不可にするかどうかを決定するフラグ。 **semaphoreBlockOnAcquire** が false の場合、効果はありません。指定しない場合、デフォルト値の true が使用されます。

semaphoreBlockOnAcquire

別のスレッドによって保持されている場合に、セッションごとのセマフォを取得しようとするスレッドが、セマフォを取得できるまでブロックするか、待機中のリクエストを拒否するかどうかを決定するフラグ。指定しない場合、デフォルト値の true が使用されます。

semaphoreFairness

セッションごとのセマフォが、セマフォのリクエストを受信した順序で許可するかどうかを決定するフラグ。 **semaphoreBlockOnAcquire** が false の場合、効果はありません。指定しない場合、デフォルト値の true が使用されます。