カテゴリ: Jakarta EE 更新日: 2026/02/14

JakartaEE レスポンスヘッダーを追加するフィルタの作成方法!初心者向け解説ガイド

Jakarta EE レスポンスヘッダーを追加するフィルタの作成
Jakarta EE レスポンスヘッダーを追加するフィルタの作成

先生と生徒の会話形式で理解しよう

生徒

「先生、Webアプリケーションでセキュリティ対策を強化したいときにレスポンスヘッダーを追加する方法ってあるんですか?」

先生

「あるよ。JakartaEEのフィルタを使えば、すべてのレスポンスに共通のヘッダーを簡単に追加できるんだ。例えばセキュリティ関連のHTTPレスポンスヘッダーやキャッシュ制御の設定などがあるね。」

生徒

「なるほど!それなら毎回サーブレットに書かなくてもいいんですね。実際にどうやって作るんですか?」

先生

「それじゃあ、レスポンスヘッダーを追加するフィルタの作成方法を実際に見てみよう。」

1. レスポンスヘッダーとは

1. レスポンスヘッダーとは
1. レスポンスヘッダーとは

HTTPレスポンスヘッダーは、サーバーがクライアント(ブラウザなど)に返す情報の一部です。例えばセキュリティ関連のX-Frame-OptionsContent-Security-Policy、キャッシュ制御のCache-Controlなどがあります。これらのレスポンスヘッダーを適切に設定することで、セキュリティ強化やパフォーマンス改善が可能になります。

2. フィルタでレスポンスヘッダーを制御する仕組み

2. フィルタでレスポンスヘッダーを制御する仕組み
2. フィルタでレスポンスヘッダーを制御する仕組み

JakartaEEのフィルタは、リクエストとレスポンスの両方にアクセスできるため、レスポンスをクライアントに返す直前にヘッダーを追加することが可能です。この仕組みを使えば、アプリ全体で共通のヘッダーを一括管理でき、セキュリティや運用面で大きなメリットがあります。

3. レスポンスヘッダーフィルタのサンプルコード

3. レスポンスヘッダーフィルタのサンプルコード
3. レスポンスヘッダーフィルタのサンプルコード

以下は、セキュリティ強化のためにレスポンスヘッダーを追加するシンプルなフィルタの例です。


@WebFilter("/*")
public class ResponseHeaderFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        if (response instanceof HttpServletResponse) {
            HttpServletResponse httpResponse = (HttpServletResponse) response;
            httpResponse.setHeader("X-Frame-Options", "DENY");
            httpResponse.setHeader("X-Content-Type-Options", "nosniff");
            httpResponse.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0");
        }
        chain.doFilter(request, response);
    }
}

このコードでは、クリックジャッキング対策やキャッシュ無効化の設定を行っています。

4. 実行結果のイメージ

4. 実行結果のイメージ
4. 実行結果のイメージ

このフィルタを導入すると、ブラウザの開発者ツールでレスポンスを確認した際に次のようなヘッダーが追加されます。


X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Cache-Control: no-store, no-cache, must-revalidate, max-age=0

5. web.xmlでの設定方法

5. web.xmlでの設定方法
5. web.xmlでの設定方法

アノテーションではなくweb.xmlを使ってレスポンスヘッダー用フィルタを設定する方法もあります。レガシー環境や設定ファイルで統一したい場合にはこちらを利用します。


<filter>
    <filter-name>ResponseHeaderFilter</filter-name>
    <filter-class>com.example.ResponseHeaderFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ResponseHeaderFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

6. レスポンスヘッダーフィルタを使うメリット

6. レスポンスヘッダーフィルタを使うメリット
6. レスポンスヘッダーフィルタを使うメリット

レスポンスヘッダーフィルタを導入することで、以下のような利点があります。

  • セキュリティ関連のHTTPレスポンスヘッダーを一括で追加できる
  • キャッシュ制御を統一的に行える
  • サーブレットごとに記述する必要がなくメンテナンスが容易になる
  • アプリ全体のセキュリティポリシーを中央集約的に管理できる

7. 実運用での注意点

7. 実運用での注意点
7. 実運用での注意点

レスポンスヘッダーはブラウザやクライアントの挙動に直接影響を与えるため、導入時には十分なテストが必要です。例えばX-Frame-OptionsDENYにすると外部サイトからのiframe埋め込みが完全に禁止されるため、意図した挙動か確認する必要があります。またContent-Security-Policyなど強力なヘッダーを設定する場合は、実際の画面表示や外部リソースの読み込みに問題が出ないか注意が必要です。

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

JakartaEEのフィルタとは具体的にどのような機能で、なぜレスポンスヘッダーの追加に便利なのですか?

JakartaEE(旧Java EE)のフィルタとは、クライアントからのリクエストがサーブレットに届く前や、サーバーからのレスポンスがクライアント(ブラウザ)に返される直前に、特定の処理を差し込むことができる仕組みのことです。レスポンスヘッダーの追加に便利な理由は、アプリケーション内のすべてのサーブレットやJSPに対して、共通の処理を一括で適用できるからです。例えば、セキュリティ強化のためのHTTPヘッダーを各画面のプログラムに個別に記述すると、修正漏れやミスが発生しやすくなりますが、フィルタを使えば「一箇所に書くだけ」ですべての通信に反映されます。これにより、メンテナンス性が劇的に向上し、開発効率も高まります。
関連記事:
カテゴリの一覧へ
新着記事
New1
Play Framework
Play Frameworkのフォーム処理完全ガイド!メールアドレス・電話番号の形式チェック
New2
Jakarta EE
Jakarta EE JSFカスタムコンポーネントとは?初心者向けに基礎から徹底解説【Jakarta Faces・Webアプリ開発】
New3
Play Framework
Play Frameworkのフォーム処理を完全ガイド!文字数制限と正規表現バリデーション
New4
Jakarta EE
Jakarta EEのJSFマネージドBean入門!Jakarta Facesで学ぶ基本と役割を初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta サーブレットのdoGetとdoPostの違いと使い分けを徹底解説!初心者でもわかるHTTPリクエスト処理
No.2
Java&Spring記事人気No2
Play Framework
Play Frameworkで学ぶ単純なフォーム作成方法!初心者でもわかる名前・メールアドレス入力
No.3
Java&Spring記事人気No3
Jakarta EE
Jakarta EEのリリースサイクルとバージョンの進化をやさしく解説!
No.4
Java&Spring記事人気No4
Play Framework
Play FrameworkのUI設計を最適化!Twirlテンプレートのベストプラクティス
No.5
Java&Spring記事人気No5
Play Framework
Play Frameworkのデータバインディングを完全解説!初心者でもわかるフォーム入力と自動変換の仕組み
No.6
Java&Spring記事人気No6
Jakarta EE
Jakarta EE JSFカスタムコンポーネントとは?初心者向けに基礎から徹底解説【Jakarta Faces・Webアプリ開発】
No.7
Java&Spring記事人気No7
Play Framework
Play Frameworkのフォーム処理を完全ガイド!文字数制限と正規表現バリデーション
No.8
Java&Spring記事人気No8
Jakarta EE
Jakarta EEのJSFマネージドBean入門!Jakarta Facesで学ぶ基本と役割を初心者向けに徹底解説