個人開発でJava(Spring)を使っている中で、filter や servlet / servlet container というキーワードに出会い、
それぞれの役割と立ち位置がよく分からず時間が溶けたので、備忘録を兼ねて投稿します。
※本記事ではそれぞれの「立ち位置(レイヤー構造)」にフォーカスしています。役割の詳細は触れていない部分もあるのでご容赦ください。
🧭 全体像:それぞれの立ち位置
まずは図をご覧ください。
Java(Spring)で認証機能などを含むWebアプリケーションを作る際の、リクエスト処理のイメージ図です。

🤔 なぜFilterやServletのことを調べていたのか?
今回、JWTを使ったログイン認証機能をSpringで実装する中、
「ログイン後のリクエストに対して、正しく認証されているかを判定する仕組み」が必要になりました。
- 認証処理とJWTトークン発行は既に実装済み
- しかし、**ログイン後のリクエストをどう検証するか?**が曖昧だった
色々と調べていくうちに、
-
Filterを使うことで、Servletにリクエストを渡す前のトークンチェックが可能 -
Filterで不正なリクエストを弾いてから、正しいものだけをServletに渡す
ということがわかってきました。
🔐 JWTについてざっくり
JWT(JSON Web Token)は、与えられた秘密鍵をもとに発行されるトークンで、主に認証用途で使われます。
使用時の注意点:
-
ユーザーのパスワードなど、機密情報をキーに含めてはいけない
- トークンはクライアント側に送られ、誰でも見ることができるため
-
トークンには有効期限を必ず設定する
- 永久に有効なトークンは、万が一漏洩したときのリスクが大きすぎる
※JWTの詳細は今回の主題ではないため割愛します。
🌀 ふわっと理解で詰んでいた話
知識の断片は集められていたけど、次のような状態になっていました:
- Filterって何?
- Servletってどこにいるの?
- それぞれがどう繋がってるの?
- Servlet Containerってなに?どこからどこまで?
つまり、「機能は作れそうだけど、自信がない」状態。
このままでは将来的に自分でも何を書いたのか分からなくなると思い、理解を深めることにしました。
🧠 FilterとServletの立ち位置:超重要だったポイント
調べていて特にハマったのが、FilterとServletの位置関係と所属スコープです。
- 多くの情報で「FilterはServletの前に実行される」とは書かれている
- でも、「FilterとServletはServlet Containerの中にいる」という説明は意外と見つからない
結論:
-
Servlet Containerが HTTPリクエストの最初の受け口 -
Filterはその中でServletに届く前のチェック機構 -
ServletがリクエストをControllerなどに渡す司令塔
上記の図の通り、Filter・Servletも同じ「Servlet Containerの中」に配置されており、順番に処理されていくのがポイントです。
📝 おわりに
今回は「ServletとFilterの立ち位置」に焦点をあてて図を作成してみました。
過去の自分のように「なんか動くけど、どこが何やってるかわからん…」という状態の人に、少しでも役立てばうれしいです。
- 「ここちょっと違うよ!」という指摘も大歓迎です!
- 「なるほど、わかりやすかった」って思ってもらえたら喜びます!
最後まで読んでいただきありがとうございました!