はじめに
Spring Boot で Web アプリや API を作っていると、
Filter や Interceptor を使う場面が出てきます。
「どっちを使えばいいの?」
「役割が似ていて違いがわからない」
「ログや認証はどっちに書くべき?」
そんな疑問を持つ方も多いと思います。
この記事では、Filter と Interceptor の違いを
やさしく・実務で役立つ形 で整理していきます。
まずはコードを見て、そこから少しずつ理解していきましょう。
まずはコードを確認
Filter の例
@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 の例
@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 の番人”
このイメージが一番わかりやすいです。
もっと具体的に違いを見てみる
動くタイミングの違い
| 項目 | Filter | Interceptor |
|---|---|---|
| 動く場所 | Servlet(Tomcat) | Spring MVC |
| Controller より前? | 前 | 前 |
| Controller の後? | 後 | 後 |
| View の前後? | × | ○ |
Filter は Spring より前 に動き、
Interceptor は Controller の前後 に動きます。
できることの違い
| やりたいこと | Filter | Interceptor |
|---|---|---|
| リクエストの共通処理 | ○ | ○ |
| 認証(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
難しく聞こえますが、
「どの層で処理したいか」
で選べば十分です。

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

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

コメント