【Spring Boot】Filter / Interceptor の違いをやさしく解説

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

Spring Boot で Web アプリや API を作っていると、
FilterInterceptor を使う場面が出てきます。

「どっちを使えばいいの?」
「役割が似ていて違いがわからない」
「ログや認証はどっちに書くべき?」

そんな疑問を持つ方も多いと思います。

この記事では、Filter と Interceptor の違いを
やさしく・実務で役立つ形 で整理していきます。

まずはコードを見て、そこから少しずつ理解していきましょう。

まずはコードを確認

Filter の例

Java
@Component
public class LoggingFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        System.out.println("Filter: before");
        chain.doFilter(request, response);
        System.out.println("Filter: after");
    }
}

Interceptor の例

Java
@Component
public class LoggingInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("Interceptor: before");
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        System.out.println("Interceptor: after");
    }
}

どちらも「リクエストの前後で処理を挟む」ことができますが、
役割や動くタイミングが異なります。

Filter と Interceptor の違いをふわっと整理

一言でいうと…

  • Filter → Servlet レベルで動く“入口の番人”
  • Interceptor → Spring MVC レベルで動く“Controller の番人”

このイメージが一番わかりやすいです。

もっと具体的に違いを見てみる

動くタイミングの違い

項目FilterInterceptor
動く場所Servlet(Tomcat)Spring MVC
Controller より前?
Controller の後?
View の前後?×

Filter は Spring より前 に動き、
Interceptor は Controller の前後 に動きます。

できることの違い

やりたいことFilterInterceptor
リクエストの共通処理
認証(JWT など)
ログ出力
Controller の情報を使う×
HandlerMethod を参照×

Interceptor は
Controller のメソッド情報(HandlerMethod)
にアクセスできるため、
「この Controller のときだけ処理したい」
といった細かい制御ができます。

実務での使い分け

Filter

  • リクエストの最初の入口で処理したい
  • 認証前の共通処理
  • 低レベルの処理(文字コード、CORS など)

Interceptor

  • Controller 単位で処理したい
  • ログ、認可、業務的な前処理
  • HandlerMethod を使いたい

あわせて知っておきたいポイント

Filter は Servlet の世界

Tomcat → Filter → DispatcherServlet → Interceptor → Controller
という順番で動きます。

Interceptor は Spring MVC の世界

Controller の前後で動くため、
Spring の情報を使った処理が得意です。

AOP とも違う

  • Filter / Interceptor → Web リクエストに対する処理
  • AOP → メソッド呼び出しに対する処理

用途が異なります。

使うときに気をつけたいこと

Filter は設定が必要

Filter は登録しないと動きません。

Interceptor は HandlerInterceptorAdapter が非推奨

Spring 5 以降は
HandlerInterceptor を使います。

どちらも“やりすぎ注意”

Filter や Interceptor にロジックを書きすぎると
アプリの構造がわかりにくくなります。

まとめ

Filter と Interceptor は、
「リクエストの前後で処理を挟むための仕組み」
です。

  • Filter → Servlet レベルの入口
  • Interceptor → Spring MVC レベルの入口
  • Controller の情報を使いたいなら Interceptor
  • 低レベルの共通処理は Filter

難しく聞こえますが、
「どの層で処理したいか」
で選べば十分です。


decopon
decopon

Filter と Interceptor の違いを理解すると、
リクエストの流れが一気にクリアになります。
認証・ログ・共通処理の設計がぐっと楽になります。
あなたの開発が、今日より少しだけ楽になりますように。

moco
moco

入口の番人と Controller の番人…それぞれ役割があってかわいいね。

コメント

タイトルとURLをコピーしました