Valve コンポーネント

目次

はじめに

Valve 要素は、関連付けられた Catalina コンテナ(EngineHostContext)のリクエスト処理パイプラインに挿入されるコンポーネントを表します。個々の Valve は異なる処理能力を持ち、以下に個別に説明します。

以下の説明では、$CATALINA_BASE 変数名を使用して、ほとんどの相対パスが解決されるベースディレクトリを参照します。CATALINA_BASE ディレクトリを設定して Tomcat を複数インスタンスで構成していない場合、$CATALINA_BASE は Tomcat をインストールしたディレクトリである $CATALINA_HOME の値に設定されます。

アクセスログ

アクセスログは、org.apache.catalina.AccessLog インターフェースを実装する Valve によって実行されます。

アクセスログValve

はじめに

Access Log Valve は、標準の Web サーバーによって作成されるログファイルと同じ形式でログファイルを作成します。これらのログは、後で標準のログ分析ツールによって解析され、ページヒット数、ユーザーセッションアクティビティなどを追跡できます。このValveは、ログファイルを書き込むための自己完結型のロジックを使用し、毎日深夜に自動的にログファイルをロールオーバーできます。(アクセスログの基本的な要件は、大量の連続的なデータを低オーバーヘッドで処理することです。このValveは Apache Commons Logging を使用しないため、追加のオーバーヘッドと潜在的に複雑な設定を回避します)。

このValveは、任意の Catalina コンテナ(ContextHost、またはEngine)に関連付けることができ、そのコンテナによって処理されるすべてのリクエストを記録します。

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

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

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

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

属性

Access Log Valve は以下の設定属性をサポートしています

属性説明
buffered

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

className

使用する実装の Java クラス名。デフォルトのアクセスログバルブを使用するには、これを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

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

encoding

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

fileDateFormat

アクセスログファイル名にカスタムタイムスタンプを許可します。フォーマットされたタイムスタンプが変更されるたびにファイルがローテーションされます。デフォルト値は.yyyy-MM-ddです。毎時ローテーションしたい場合は、この値を.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で現在のタイムスタンプが含まれます。ローテーション中にファイルは閉じられ、名前の次のタイムスタンプを持つ新しいファイルが作成され、使用されます。renameOnRotatetrueに設定すると、タイムスタンプはアクティブなログファイル名の一部ではなくなります。ローテーション中にのみファイルが閉じられ、その後タイムスタンプを含むように名前が変更されます。これは、ほとんどのログフレームワークが時間ベースのローテーションを行う場合の動作に似ています。デフォルト値: 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 - 日付と時刻(Common Log Format)
  • %T - リクエストの処理にかかった時間(秒)
  • %u - 認証されたリモートユーザー(存在する場合)、それ以外の場合は '-' (必要に応じてエスケープされる)
  • %U - リクエストされた URL パス
  • %v - ローカルサーバー名
  • %X - レスポンス完了時の接続ステータス
    • X = レスポンス完了前に接続が中断された。
    • + = レスポンス送信後も接続が維持される可能性がある。
    • - = レスポンス送信後に接続が閉じられる。

また、着信または発信ヘッダー、クッキー、セッション、またはリクエスト属性、および特殊なタイムスタンプ形式の情報を書き込むこともサポートされています。これは、Apache HTTP Server のログ構成構文をモデルにしています。それぞれを異なるxxxキーで複数回使用できます。

  • %{xxx}a リモートアドレス(クライアント)を書き込む(xxx==remote)か、接続ピアアドレスを書き込む(xxx=peer
  • %{xxx}i 名前がxxxの受信ヘッダーの値を書き込む(必要に応じてエスケープされる)
  • %{xxx}o 名前がxxxの送信ヘッダーの値を書き込む(必要に応じてエスケープされる)
  • %{xxx}c 名前がxxxのクッキーの値を書き込む(カンマ区切りで、必要に応じてエスケープされる)
  • %{xxx}r 名前がxxxの ServletRequest 属性の値を書き込む(必要に応じてエスケープされる、リクエストが null の場合は??
  • %{xxx}s 名前がxxxの HttpSession 属性の値を書き込む(必要に応じてエスケープされる、リクエストが null の場合は??
  • %{xxx}p ローカル(サーバー)ポートを書き込む(xxx==local)か、リモート(クライアント)ポートを書き込む(xxx=remote
  • %{xxx}t 拡張された SimpleDateFormat パターンxxxを使用してフォーマットされた、リクエストの終了時のタイムスタンプを書き込む
  • %{xxx}L リクエストに関連付けられた識別子を書き込む。xxxの唯一の有効な値は接続を表すcです。
  • %{xxx}T リクエストの処理にかかった時間を単位xxxで書き込む。有効な単位はナノ秒の場合はns、マイクロ秒の場合はus、ミリ秒の場合はms、秒の端数の場合はfracsec、または秒全体の場合は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"は、RefererUser-Agentヘッダーの値を、それぞれ二重引用符で囲んでcommonパターンに追加します。

未知のパターン識別子を使用するフィールドは???X???としてログに記録され、Xは未知の識別子です。未知のパターン識別子と{xxx}キーを持つフィールドは???としてログに記録されます。

Tomcat がリバースプロキシの背後で動作している場合、Access Log Valve によってログに記録されるクライアント情報は、Tomcat とリバースプロキシの設定に応じて、リバースプロキシ、ブラウザ、またはその両方の組み合わせを表す場合があります。Tomcat の設定オプションについては、プロキシのサポートプロキシハウツーを参照してください。mod_jk を使用するリバースプロキシについては、汎用プロキシのドキュメントを参照してください。その他のリバースプロキシについては、それらのドキュメントを参照してください。

拡張アクセスログValve

はじめに

Extended Access Log ValveAccess Log Valveクラスを拡張しているため、同じ自己完結型ロギングロジックを使用します。これは、多くの同じファイル処理属性を実装していることを意味します。標準のAccessLogValveとの主な違いは、ExtendedAccessLogValveが W3C によって定義された拡張ログファイル形式のワーキングドラフトに準拠するログファイルを作成することです。

属性

Extended Access Log Valve は、標準のAccess Log Valveのすべての設定属性をサポートしています。異なるのは、classNamepatternに使用される値のみです。

属性説明
className

使用する実装の Java クラス名。拡張アクセスログバルブを使用するには、これをorg.apache.catalina.valves.ExtendedAccessLogValveに設定する必要があります。

pattern

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

pattern属性の値はフォーマットトークンで構成されます。一部のトークンには追加のプレフィックスが必要です。可能なプレフィックスは「クライアント」のc、「サーバー」のs、「クライアントからサーバーへ」のcs、「サーバーからクライアントへ」のsc、または「アプリケーション固有」の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 - リクエストの処理にかかった時間(秒)。ナノ秒の場合は-ns、マイクロ秒の場合は-us、ミリ秒の場合は-ms、秒の端数の場合は-fracsecのサフィックスも使用できます。
  • x-threadname - 現在のリクエストスレッド名(後でスタックトレースと比較可能)

x-H(XXX)のいずれについても、HttpServletRequest オブジェクトから以下のメソッドが呼び出されます

  • x-H(authType): getAuthType
  • x-H(characterEncoding): getCharacterEncoding
  • x-H(connectionId): getServletConnection().getConnectionId
  • 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

ヘッダー、クッキー、コンテキスト、リクエストまたはセッション属性、およびリクエストパラメーターに関する情報を書き込む機能もサポートされています。

  • cs(XXX) XXX という名前の受信リクエストヘッダー用
  • sc(XXX) XXX という名前の送信レスポンスヘッダー用
  • x-A(XXX) XXX という名前のサーブレットコンテキスト属性用
  • x-C(XXX) XXX という名前のクッキー用(必要に応じてカンマ区切り)
  • 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エスケープされます。
  • パターン識別子の間の任意の逐語的なテキストは、黙って無視されます。
サブオブジェクトを生成しないパターン識別子に使用される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コンテナ(EngineHost、またはContext)に関連付けることができ、処理のためにこのコンテナに提示されたすべてのリクエストを、次に進む前に受け入れる必要があります。

正規表現の構文は、「標準」のワイルドカードマッチングとは異なります。Tomcatはjava.util.regexパッケージを使用します。サポートされる表現の詳細については、Javaドキュメントを参照してください。

属性addConnectorPorttrueに設定すると、各コネクタに異なる表現を許可するために、サーバーコネクタポートをセミコロン(";")で区切って追加できます。

属性usePeerAddresstrueに設定すると、バルブはチェックで接続ピアアドレスを使用します。これは、Tomcatの前にリバースプロキシがAJPプロトコル、またはHTTPプロトコルとRemoteIp(Valve|Filter)のいずれかと組み合わせて使用されている場合、クライアントIPとは異なります。

拒否されたリクエストには、ステータスコード403のレスポンスが返されます。このステータスコードは、属性denyStatusを使用して上書きできます。

属性invalidAuthenticationWhenDenytrueに設定すると、リクエストが拒否された場合の動作を、拒否する代わりに無効な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に設定する必要があります。

allow

リモートクライアントのIPアドレスと比較される正規表現(java.util.regexを使用)。この属性が指定されている場合、このリクエストが受け入れられるためにはリモートアドレスが一致する必要があります。この属性が指定されていない場合、リモートアドレスがdenyパターンに一致しない限り、すべてのリクエストが受け入れられます。

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コンテナ(EngineHost、またはContext)に関連付けることができ、処理のためにこのコンテナに提示されたすべてのリクエストを、次に進む前に受け入れる必要があります。

正規表現の構文は、「標準」のワイルドカードマッチングとは異なります。Tomcatはjava.util.regexパッケージを使用します。サポートされる表現の詳細については、Javaドキュメントを参照してください。

属性addConnectorPorttrueに設定すると、各コネクタに異なる表現を許可するために、サーバーコネクタポートをセミコロン(";")で区切って追加できます。

拒否されたリクエストには、ステータスコード403のレスポンスが返されます。このステータスコードは、属性denyStatusを使用して上書きできます。

属性invalidAuthenticationWhenDenytrueに設定すると、リクエストが拒否された場合の動作を、拒否する代わりに無効なauthenticationヘッダーを設定するように変更できます。これは、コンテキスト属性preemptiveAuthentication="true"と組み合わせて使用すると便利です。

注: このバルブは、メソッドServletRequest.getRemoteHost()が返す値を処理します。このメソッドが適切なホスト名を返すようにするには、コネクタで「DNSルックアップ」機能を有効にする必要があります。

関連項目: リモートアドレスバルブリモートCIDRバルブリモートIPバルブHTTPコネクタの設定。

属性

リモートホストバルブは、次の設定属性をサポートしています。

属性説明
className

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

allow

リモートクライアントのホスト名と比較される正規表現(java.util.regexを使用)。この属性が指定されている場合、このリクエストが受け入れられるためにはリモートホスト名が一致する必要があります。この属性が指定されていない場合、リモートホスト名がdenyパターンに一致しない限り、すべてのリクエストが受け入れられます。

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コンテナ(EngineHost、またはContext)に関連付けることができ、処理のためにこのコンテナに提示されたすべてのリクエストを、次に進む前に受け入れる必要があります。

このバルブは、ApacheのOrderAllow 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のようなサブドメイン表記もサポートされていません。

属性addConnectorPorttrueに設定すると、各コネクタに異なる表現を許可するために、サーバーコネクタポートをセミコロン(";")で区切って追加できます。

属性usePeerAddresstrueに設定すると、バルブはチェックで接続ピアアドレスを使用します。これは、Tomcatの前にリバースプロキシがAJPプロトコル、またはHTTPプロトコルとRemoteIp(Valve|Filter)のいずれかと組み合わせて使用されている場合、クライアントIPとは異なります。

拒否されたリクエストには、ステータスコード403のレスポンスが返されます。このステータスコードは、属性denyStatusを使用して上書きできます。

属性invalidAuthenticationWhenDenytrueに設定すると、リクエストが拒否された場合の動作を、拒否する代わりに無効なauthenticationヘッダーを設定するように変更できます。これは、コンテキスト属性preemptiveAuthentication="true"と組み合わせて使用すると便利です。

このバルブのその他の機能は次のとおりです。

  • CIDRプレフィックスを省略すると、このバルブは単一IPバルブになります。
  • リモートホストバルブとは異なり、凝縮された形式のIPv6アドレス(::1fe80::/71など)を処理できます。

関連項目: リモートアドレスバルブリモートホストバルブリモートIPバルブHTTPコネクタの設定。

属性

リモートCIDRバルブは、次の設定属性をサポートしています。

属性説明
className

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

allow

リモートクライアントのIPアドレスが照合されるIPv4またはIPv6のネットマスクまたはアドレスのカンマ区切りリスト。この属性が指定されている場合、このリクエストが受け入れられるためにはリモートアドレスが一致する必要があります。この属性が指定されていない場合、リモートIPがdeny属性のネットマスクに一致しない限り、すべてのリクエストが受け入れられます。

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が有効であるかどうかを証明できないため、そのノードをターゲットとしているように見えるセッションに対するすべてのリクエストを無効化された(または「ドレイン中」の)ノードに送信し、結果として「ドレイン」プロセスが不要に長引く原因となります。

このバルブは、無効なセッションに対するリクエストを検出し、リクエストからセッション情報を削除し、同じURLにリダイレクトします。これにより、ロードバランサーはリクエストを処理するために別の(アクティブな)ノードを選択するはずです。これにより、無効化されたノードの「ドレイン」プロセスが高速化されます。

ノードのアクティベーション状態はロードバランサーによってリクエストで送信されるため、無効化されるノードでの状態変更は不要です。このバルブをバルブパイプラインに設定するだけで、アクティベーション状態が「disabled」に設定されたときにアクションが実行されます。

このバルブは、認証バルブよりもバルブパイプラインの早い段階で登録するよう注意してください。なぜなら、このバルブは、認証バルブが保護されたリソースへのリクエストを保存する前にリクエストをリダイレクトできる必要があるからです。もしそうなった場合、新しいセッションが作成され、新しい有効なセッションが確立されるため、ドレインプロセスが停滞します。

属性

ロードバランサー ドレインバルブは、次の設定属性をサポートしています。

属性説明
className

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

redirectStatusCode

クライアントがロードバランサーによって再バランスされるためにリダイレクトされる際に使用されるカスタムリダイレクトコードを設定できます。デフォルトは307 TEMPORARY_REDIRECTです。

ignoreCookieName

ignoreCookieValueと組み合わせて使用すると、クライアントはこのバルブが何もしないようにするクッキー(および付随する値)を提示できます。これにより、無効化されたノードを再有効化する前にプローブし、期待通りに動作していることを確認できます。

ignoreCookieValue

ignoreCookieNameと組み合わせて使用すると、クライアントはこのバルブが何もしないようにするクッキー(および付随する値)を提示できます。これにより、無効化されたノードを再有効化する前にプローブし、期待通りに動作していることを確認できます。

リモートIP Valve

はじめに

mod_remoteipのTomcatポートであるこのバルブは、リクエストの表示上のクライアントリモートIPアドレスとホスト名を、プロキシまたはロードバランサーがリクエストヘッダー(例: 「X-Forwarded-For」)経由で提示するIPアドレスリストに置き換えます。

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

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

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

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

このバルブによって設定され、アクセスロギングで使用できるリクエスト属性の名前は次のとおりです。

  • 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バルブは、次の設定属性をサポートしています。

属性説明
className

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

remoteIpHeader

要求元のクライアントから始まる、経由したIPアドレスのリストを保持するこのバルブによって読み取られる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|::1|fe[89ab]\p{XDigit}:.*|"f[cd]\p{XDigit}{2}+:.* が使用されます。

proxiesHeader

受信したremoteIpHeaderで処理されたプロキシのリストを保持するためにこのバルブによって作成されるHTTPヘッダーの名前。指定されていない場合、デフォルトのx-forwarded-byが使用されます。

requestAttributesEnabled

trueに設定すると、AccessLog実装で使用されるリクエスト属性を設定し、リモートアドレス、リモートホスト、サーバーポート、およびプロトコルについてリクエストが返す値を上書きします。リクエスト属性は、転送されたリモートアドレスをManager Webアプリケーションのステータスページに表示するためにも使用されます。設定されていない場合、デフォルト値のtrueが使用されます。

trustedProxies

プロキシのIPアドレスが信頼されたプロキシと見なされるために一致しなければならない正規表現(java.util.regexを使用)。remoteIpHeaderに現れる信頼されたプロキシは信頼され、proxiesHeader値に現れます。指定されていない場合、プロキシは信頼されません。

protocolHeader

クライアントがプロキシに接続するために使用したプロトコルを保持するこのバルブによって読み取られるHTTPヘッダーの名前。指定されていない場合、デフォルトのX-Forwarded-Protoが使用されます。

hostHeader

クライアントがプロキシに接続するために使用したホストを保持するこのバルブによって読み取られるHTTPヘッダーの名前。指定されていない場合、デフォルトのnullが使用されます。

portHeader

クライアントがプロキシに接続するために使用したポートを保持するこのバルブによって読み取られるHTTPヘッダーの名前。指定されていない場合、デフォルトのnullが使用されます。

protocolHeaderHttpsValue

HTTPSリクエストであることを示すprotocolHeaderの値。指定されていない場合、デフォルトのhttpsが使用されます。

httpServerPort

protocolHeaderhttpプロトコルを示し、portHeaderが存在しない場合にServletRequest.getServerPort()によって返される値。指定されていない場合、デフォルトの80が使用されます。

httpsServerPort

protocolHeaderhttpsプロトコルを示し、portHeaderが存在しない場合にServletRequest.getServerPort()によって返される値。指定されていない場合、デフォルトの443が使用されます。

changeLocalName

trueの場合、ServletRequest.getLocalHost()およびServletRequest.getServerHost()によって返される値がこのバルブによって変更されます。指定されていない場合、デフォルトのfalseが使用されます。

changeLocalPort

trueの場合、ServletRequest.getLocalPort()およびServletRequest.getServerPort()によって返される値がこのバルブによって変更されます。指定されていない場合、デフォルトのfalseが使用されます。

SSL Valve

はじめに

mod_proxy_httpを使用する場合、クライアントのSSL情報はプロトコルに含まれません(mod_jkやmod_proxy_ajpとは異なります)。クライアントSSL情報をTomcatで利用できるようにするには、追加の設定が必要です。httpdでは、mod_headersを使用してSSL情報をHTTPヘッダーとして追加します。Tomcatでは、このバルブを使用して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バルブは、次の設定属性をサポートしています。

属性説明
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

はじめに

シングルサインオンバルブは、ユーザーが仮想ホストに関連付けられた任意のウェブアプリケーションにサインオンし、その後、同じ仮想ホスト上の他のすべてのウェブアプリケーションによってそのIDが認識されるようにしたい場合に使用されます。

詳細については、Host要素のシングルサインオンの特別な機能を参照してください。

属性

シングルサインオンバルブは、次の設定属性をサポートしています。

属性説明
className

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

requireReauthentication

デフォルトはfalse。各リクエストがセキュリティレルムに再認証される必要があるかどうかを決定するフラグ。「true」の場合、このバルブはキャッシュされたセキュリティ資格情報(ユーザー名とパスワード)を使用して、SSOセッションに関連付けられた各リクエストをレルムに再認証します。「false」の場合、バルブ自体が有効なSSOクッキーの存在に基づいてリクエストを認証でき、レルムを再確認する必要はありません。

cookieDomain

SSOクッキーに使用するホストドメインを設定します。

cookieName

SSOクッキーに使用するクッキー名を設定します。デフォルト値はJSESSIONIDSSOです。

認証

このセクションのバルブは、org.apache.catalina.Authenticatorインターフェースを実装しています。

Basic認証Authenticator Valve

はじめに

基本認証バルブは、基本認証を使用するように設定されたすべてのコンテキストに自動的に追加されます。

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

属性

基本認証バルブは、次の設定属性をサポートしています。

属性説明
allowCorsPreflight

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

alwaysUseSession

ユーザーが認証されたら常にセッションを使用すべきか?これにより、セッションが認証されたプリンシパルをキャッシュするために使用できるため、すべてのリクエストでレルムを介してユーザーを認証する必要がなくなるため、いくつかのパフォーマンス上の利点が得られる可能性があります。これは、JNDIRealmまたはDataSourceRealmsとともに使用される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を使用してバイトから文字に変換されます。デフォルト値はUTF-8です。

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です。

Digest認証Authenticator Valve

はじめに

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

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

属性

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

属性説明
algorithms

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

allowCorsPreflight

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

alwaysUseSession

ユーザーが認証されたら常にセッションを使用すべきか?これにより、セッションが認証されたプリンシパルをキャッシュするために使用できるため、すべてのリクエストでレルムを介してユーザーを認証する必要がなくなるため、いくつかのパフォーマンス上の利点が得られる可能性があります。これは、JNDIRealmまたはDataSourceRealmsとともに使用される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認証はサーバーのナンス値とナンスカウント値を追跡します。この属性は、そのキャッシュのサイズを制御します。指定されていない場合、デフォルト値の1000が使用されます。

nonceCountWindowSize

クライアントのリクエストは順不同で処理される可能性があり、それはナンスカウント値も順不同で処理される可能性があることを意味します。ナンスカウントが順不同で提示された場合の認証失敗を防ぐために、認証器はナンスカウント値のウィンドウを追跡します。この属性は、そのウィンドウのサイズを制御します。指定されていない場合、デフォルト値の100が使用されます。

nonceValidity

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

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認証が常に失敗する場合にのみ設定すべきです。

フォーム認証Authenticator Valve

はじめに

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

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

属性

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

属性説明
allowCorsPreflight

CORS仕様で要求されるように、CORSプリフライトリクエストと見なされるリクエストが認証をバイパスすることを許可するかどうか。許可される値はneverfilteralwaysです。neverは、CORSプリフライトリクエストと見なされる場合でも、リクエストが認証をバイパスしないことを意味します。filterは、リクエストがCORSプリフライトリクエストと見なされ、CORSフィルターが有効になっているウェブアプリケーションにマッピングされており、リクエストがCORSフィルターマッパーのURLPatternsに一致する場合に、リクエストが認証をバイパスすることを意味します。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

ログインページを直接リクエストしたり、セッションが期限切れになるほどログインを遅らせたりするなど、フォーム認証プロセスが誤用された場合の動作を制御します。この属性が設定されている場合、エラーレスポンスコードを返す代わりに、ログインフォームが有効な資格情報で送信された場合に、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認証Authenticator Valve

はじめに

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

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

属性

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

属性説明
allowCorsPreflight

CORS仕様で要求されるように、CORSプリフライトリクエストと見なされるリクエストが認証をバイパスすることを許可するかどうか。許可される値はneverfilteralwaysです。neverは、CORSプリフライトリクエストと見なされる場合でも、リクエストが認証をバイパスしないことを意味します。filterは、リクエストがCORSプリフライトリクエストと見なされ、CORSフィルターが有効になっているウェブアプリケーションにマッピングされており、リクエストがCORSフィルターマッパーのURLPatternsに一致する場合に、リクエストが認証をバイパスすることを意味します。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要素内で必要な値を使用して構成できます。

属性

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

属性説明
allowCorsPreflight

CORS仕様で要求されるように、CORSプリフライトリクエストと見なされるリクエストが認証をバイパスすることを許可するかどうか。許可される値はneverfilteralwaysです。neverは、CORSプリフライトリクエストと見なされる場合でも、リクエストが認証をバイパスしないことを意味します。filterは、リクエストがCORSプリフライトリクエストと見なされ、リクエストがマッピングされるウェブアプリケーションでCORSフィルターが有効になっており、かつリクエストがCORSフィルターマッパーのURLパターンに一致する場合に、リクエストが認証をバイパスすることを意味します。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 keep-aliveが無効になるユーザーエージェントを定義できます。これは、接続が単一のリクエストにのみ使用され、接続ごとの認証済みユーザー情報をキャッシュする機能がないことを意味します。HTTP keep-aliveを無効にするとパフォーマンスコストが発生します。

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

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

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

エラーレポートValve

はじめに

エラーレポートバルブは、HTTPステータスコードの単純なエラーハンドラであり、HTMLエラーページを生成して返します。特定のステータスコードや例外タイプに対して、事前に定義された静的な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.IOExceptionIOExceptionに対して返すファイルを指定します。場所は相対パスまたは絶対パスのいずれかです。相対パスの場合、$CATALINA_BASEに対する相対パスでなければなりません。一致するエラーページが見つからない場合、デフォルトのエラーレポートバルブのレスポンスが返されます。

showReport

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

showServerInfo

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

JsonエラーレポートValve

はじめに

JSONエラーレポートバルブは、HTTPステータスコードの単純なエラーハンドラであり、JSONエラーメッセージを返します。

このクラスを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に一致させるために使用する必要があります。

クローラーセッションマネージャーValve

はじめに

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

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

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

属性

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

属性説明
className

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

contextAware

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

crawlerIps

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

crawlerUserAgents

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

hostAware

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

sessionInactiveInterval

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

スタックしたスレッド検出Valve

はじめに

このバルブは、処理に時間がかかるリクエストを検出することを可能にし、それはそのリクエストを処理しているスレッドがスタックしていることを示している可能性があります。さらに、オプションでそのようなスレッドを中断して、ブロック解除を試みることができます。

そのようなリクエストが検出されると、そのスレッドの現在のスタックトレースがWARNレベルでTomcatログに書き込まれます。

スタックしたスレッドのIDと名前は、JMXのstuckThreadIdsおよびstuckThreadNames属性を通じて利用できます。IDは、標準のThreading JVM MBean(java.lang:type=Threading)とともに使用して、各スタックしたスレッドに関するその他の情報を取得できます。

属性

スタックしたスレッド検出バルブは、次の設定属性をサポートしています。

属性説明
className

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

threshold

スレッドがスタックしていると見なされるまでの最小時間(秒単位)。デフォルトは600秒です。0に設定すると、検出が無効になります。

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

interruptThreadThreshold

スタックしたスレッドを「解放」するために中断を試みるべき最小時間(秒単位)。

スレッドがスタック解除される保証はありません。これは通常、I/Oやロックでスタックしたスレッドには効果的ですが、無限ループの場合はおそらく役に立ちません。

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

セマフォValve

はじめに

セマフォバルブは、同時リクエスト処理スレッドの数を制限することができます。

org.apache.catalina.valves.SemaphoreValveは、サブクラスが動作をカスタマイズするためにオーバーライドできるメソッドを提供します。

  • controlConcurrencyは、条件を追加するためにオーバーライドできます。
  • permitDeniedは、許可が付与されない場合にエラーハンドリングを追加するためにオーバーライドできます。

属性

セマフォバルブは、次の設定属性をサポートしています。

属性説明
block

許可が利用可能になるまでスレッドがブロックされるかどうかを決定するフラグ。デフォルト値はtrueです。

className

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

concurrency

セマフォの並行性レベル。デフォルト値は10です。

fairness

セマフォの公平性。デフォルト値はfalseです。

highConcurrencyStatus

セマフォから許可を取得できない場合に、値が正であるならば、クライアントに返されるエラーステータスコード。デフォルト値は-1で、これはエラーが返されないことを意味します。

interruptible

許可が利用可能になるまでスレッドが中断されるかどうかを決定するフラグ。デフォルト値はfalseです。

ヘルスチェックValve

はじめに

ヘルスチェックバルブは、クラウドオーケストレーターのヘルスチェックに応答します。

属性

ヘルスチェックバルブは、次の設定属性をサポートしています。

属性説明
className

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

path

クラウドオーケストレーターのヘルスチェックロジックによるパス。バルブがコンテキストに関連付けられている場合、これはコンテキストパスからの相対パスになります。それ以外の場合、バルブは完全なURIに一致します。デフォルト値は/healthです。

checkContainersAvailable

trueの場合、バルブは関連するコンテナとそのすべての子が利用可能であるかをチェックします。デフォルト値はtrueです。

永続化Valve

はじめに

リクエストごとのセッション永続化を実装するPersistentValve。これは非スティッキーロードバランサーでの使用を意図しています。

属性

PersistentValveは、次の設定属性をサポートしています。

属性説明
className

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

filter

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

semaphoreAcquireUninterruptibly

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

semaphoreBlockOnAcquire

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

semaphoreFairness

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

パラメーター制限Valve

はじめに

パラメータ制限バルブは、コネクタの値をオーバーライドしてHTTPリクエストで許可されるパラメータの数を制限するために使用されます。このバルブは、特定のURLパターンに固有の制限を設定できます。定義されたパラメータ制限を超えるリクエストは、HTTP 400 Bad Requestエラーになります。

属性

パラメータ制限バルブは、次の設定属性をサポートしています。

属性説明
className

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

resourcePath

行で区切られたURLパターンとそのそれぞれのパラメータ制限からなるファイル。各エントリはurlPattern=limitの形式に従う必要があります。バルブは、リクエストがそのパターンに一致した場合、URLパターンに対して定義された制限を適用します。パターンが一致しない場合、コネクタの制限が使用されます。例: /api/.*=100 /admin/.*=50 /upload/.*=30,5,1024 デフォルト値: parameter_limit.config。これは、ホスト設定フォルダーまたはWebアプリケーションのWEB-INFフォルダーに配置する必要があります。

単一の整数が提供された場合、それはmaxParameterCountに使用されます。3つの整数が提供された場合、それぞれmaxParameterCountmaxPartCountmaxPartHeaderSizeに適用されます。