Java, Spring – Filter、Interceptor、DispatcherServletについて

今回はSpring Frameworkの重要な概念であるFilterInterceptorDispatcherServletについて、アウトプットしていきたいと思います。

1. Filter vs Interceptor:根本的な違い

Filterとは?

FilterはJava Servlet仕様の標準機能です。つまり、SpringだけでなくすべてのJava Webアプリケーションで使用できます。

特徴

  • Servlet仕様の一部
  • DispatcherServletに到達する前後で実行
  • ServletRequestとServletResponseにアクセス可能
  • Springの機能を使わなくても動作

Interceptorとは?

InterceptorはSpring Framework独自の機能です。Spring MVCでのみ使用できます。

特徴

  • Spring Framework固有の機能
  • HandlerMappingでコントローラが決定されたに実行
  • HandlerやModelAndViewなど、Spring MVC固有の情報にアクセス可能
  • より詳細な制御が可能

2. 実行順序を図で理解しよう

HTTPリクエスト
    ↓
【Filter 前処理】←── Java Servlet仕様
    ↓
【DispatcherServlet】←── Spring MVCの入り口
    ↓
【Interceptor 前処理】←── Spring独自機能
    ↓
【Controller実行】
    ↓
【Interceptor 後処理】
    ↓
【Filter 後処理】
    ↓
HTTPレスポンス

3. 使い分けのポイント

Filterを使うべき場面

用途理由
文字エンコーディング設定すべてのリクエストで必要
基本的な認証チェックSpring到達前に判定したい場合
CORS設定ブラウザレベルでの制御
セキュリティヘッダー追加アプリケーション全体で統一
基本的なログ記録全リクエストを対象にしたい

Interceptorを使うべき場面

用途理由
詳細な認可チェックコントローラー情報が必要
パフォーマンス測定具体的なハンドラー単位で測定
モデルデータの共通処理ModelAndViewにアクセスが必要
ビュー表示前の処理レンダリング前に共通データ設定
コントローラー固有のログどのメソッドが実行されたか記録

4. DispatcherServlet:Spring MVCの心臓部

DispatcherServletの役割

DispatcherServletはフロントコントローラーパターンを実装したSpring MVCの中核です。

主な処理

  1. リクエスト受付 – すべてのHTTPリクエストの窓口
  2. ハンドラー決定 – URLからコントローラーメソッドを特定
  3. データ変換 – リクエストパラメータをJavaオブジェクトに変換
  4. ビュー解決 – ビュー名から実際のテンプレートファイルを特定
  5. レスポンス生成 – モデルとビューを組み合わせて最終的なHTMLを生成

DispatcherServletの詳細な処理フロー

DispatcherServlet内部の処理

1. HandlerMapping
   ↓ (どのコントローラーを呼ぶ?)
2. HandlerAdapter  
   ↓ (メソッド実行の準備)
3. Interceptor前処理
   ↓
4. Controller実行
   ↓
5. Interceptor後処理
   ↓
6. ViewResolver
   ↓ (ビューファイルの特定)
7. View Rendering

5. 実際の開発での活用例

よくある組み合わせパターン

パターン1:認証・認可の多層防御

Filter: 基本的なトークン存在チェック
    ↓
Interceptor: 詳細な権限チェック(管理者のみアクセス可能など)

パターン2:ログ記録の使い分け

Filter: すべてのリクエストの基本ログ(IP、URL、時刻)
    ↓  
Interceptor: コントローラー固有のログ(実行時間、パラメータ詳細)

パターン3:データ処理の段階分け

Filter: 文字エンコーディング、基本的なデータサニタイジング
    ↓
Interceptor: ビジネスロジック用の共通データ準備

まとめ

  • Filter: Java標準機能で、アプリケーション全体の基盤的な処理に使用
  • Interceptor: Spring独自機能で、より詳細で柔軟な制御に使用
  • DispatcherServlet: Spring MVCの中核で、すべてのリクエストを適切に振り分ける交通整理役

コメントを残す