詳解Tomcatを読んだときのメモ
#Java #Tomcat
4章: 基本機能
Valveは基本的にServlet Filterと同様な機能を提供するが、Tomcat独自の実装で他のサーブレットコンテナでは使用できない
Servlet FilterはWebアプリケーションの一部として動作するが、ValveはTomcatのリクエスト処理パイプラインの一部としてより低レベルなところで動作する
BaseValueを継承することで自分のValveを定義することもできる (METAINF/context.xmlに登録すればValvetとして動くみたい)
インターフェースはほとんどServlet Filterと同じ
Valveの実装には以下のようなものがある
AccssLogValve
使うときは自分で定義したValveと同様にMETAINF/context.xmlへクラス名を登録する
ErrorReportValve
あのTomcatのエラーページを出してくれてるのはこいつ
context.xmlのValveの設定に、showServiceInof=falseとかの設定を入れてあげればエラーの詳細を消したりできる
RemoteAddrValve, RemoteHostValve
アクセスしてきたIPやホスト名をチェックして弾いたりするValve
RemoteIpValve
プロキシを介してアクセスしてきたクライアントのIPアドレスとプロキシサーバのものから、クライアントのIPアドレスへ置き換えるValve
X-Forwarded-Forなどのリクエストヘッダをつかって、リモートIPアドレスなどと置き換えてくれる
SemaphoreValve
リクエストの同時実行数を制限するValve
StuckThreadDetectionValve
長時間のリクエスト処理中のスレッドを検知するためのValve
context.xmlへクラス名を登録すると使用できる
デフォルトで、600秒超過してもリクエストがかえってこなければそのスレッドを処理遅延として検知してくれる。
障害解析時などに便利
RewriteValve
apacheのmod_rewrite的なことができるValve
認証系Valve
Realm認証で使われるValve
Filterの実装
Tomcatでも幾つかFilterの実装クラスが提供されている
AddDefaultCharsetFilter
XSSの防止
CorsLiter
CsrfPreventionFilter
etc
Logging
Tomcatは基本はJULIという、java.util.loggingの拡張フレームワークを使う
以下のに種類の設定を読むことができうr
Tomcat全体の設定: $CATALINA_BASE/conf/logging.properties
アプリごとの設定: WEB-INF/classes/logging.properties