カテゴリ: Jakarta EE 更新日: 2025/11/24

JakartaEE フィルタで認証と認可を実装する方法を初心者向けに解説!サーブレットのセキュリティ入門

Jakarta EE で認証・認可処理をフィルタで実装する方法
Jakarta EE で認証・認可処理をフィルタで実装する方法

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

生徒

「先生、JakartaEEでログインしていないユーザーを保護されたページに入れないようにするにはどうすればいいですか?」

先生

「その場合はサーブレットフィルタを使って、リクエストが来るたびに認証済みかどうかをチェックする方法がよく使われるよ。」

生徒

「なるほど!でも、もし認証だけじゃなくて特定のユーザーだけアクセスできるようにしたい場合はどうしますか?」

先生

「それが認可処理だね。ユーザーの権限を確認して、許可された人だけがリソースにアクセスできるようにフィルタで制御するんだ。」

1. 認証と認可とは何か

1. 認証と認可とは何か
1. 認証と認可とは何か

Webアプリケーションを作る上で欠かせないのがセキュリティです。JakartaEEではサーブレットフィルタを使うことで、簡単に認証(ログインチェック)と認可(アクセス制御)を組み込むことができます。認証とは「誰なのかを確認すること」、認可とは「その人が何をできるかを決めること」です。この2つを正しく使い分けることで、安全なWebアプリケーションを実現できます。

2. 認証フィルタの基本

2. 認証フィルタの基本
2. 認証フィルタの基本

認証フィルタは、ユーザーがログインしているかどうかをチェックします。例えばセッションにユーザー情報が保存されていなければ、ログインページにリダイレクトさせる仕組みを作ります。以下は基本的な認証フィルタのサンプルです。


@WebFilter("/secure/*")
public class AuthFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        HttpSession session = req.getSession(false);

        if (session == null || session.getAttribute("user") == null) {
            res.sendRedirect(req.getContextPath() + "/login.jsp");
        } else {
            chain.doFilter(request, response);
        }
    }
}

このフィルタでは「/secure/」配下のURLにアクセスする際、ユーザーがログイン済みでなければ必ずログインページにリダイレクトされるようになっています。

3. 認可フィルタの基本

3. 認可フィルタの基本
3. 認可フィルタの基本

認可フィルタは、認証済みのユーザーに対してさらにアクセス権限をチェックします。例えば「管理者だけがアクセスできるページ」を作りたい場合に役立ちます。


@WebFilter("/admin/*")
public class RoleFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        HttpSession session = req.getSession(false);

        if (session != null && "admin".equals(session.getAttribute("role"))) {
            chain.doFilter(request, response);
        } else {
            res.sendError(HttpServletResponse.SC_FORBIDDEN, "アクセス権限がありません");
        }
    }
}

この例では、ユーザーがログインしていても、セッションにrole=adminが設定されていない場合は403エラーを返すようにしています。

4. フィルタを組み合わせて使う

4. フィルタを組み合わせて使う
4. フィルタを組み合わせて使う

JakartaEEのフィルタはチェーンでつながる仕組みを持っているため、認証フィルタと認可フィルタを組み合わせることができます。まず認証フィルタでログイン済みかどうかをチェックし、その後で認可フィルタを通して権限を確認するといった流れです。こうすることで、柔軟かつ安全なアクセス制御を行うことができます。

5. フィルタで実装するメリット

5. フィルタで実装するメリット
5. フィルタで実装するメリット

フィルタを使って認証と認可を実装するメリットは以下の通りです。

  • 共通処理を一元管理できるためコードの重複を防げる
  • 複数のサーブレットに対して一括でセキュリティを適用できる
  • 設定変更や機能追加が容易で拡張性が高い
  • ログイン状態や権限を統一的に管理できる

これにより、大規模なJakartaEEアプリケーションでも効率的にセキュリティを構築できます。

6. 実運用での注意点

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

フィルタで認証・認可を実装する際は、以下の点に注意する必要があります。

  • ログイン情報は必ずセッションやセキュアなストレージで管理する
  • HTTPSを利用して通信内容を暗号化する
  • 権限チェックの条件を明確にし、不正アクセスを防ぐ
  • 必要に応じてJakarta Security APIや外部ライブラリとの連携も検討する

これらを守ることで、JakartaEEアプリケーションの安全性を高めることができます。

関連記事:
カテゴリの一覧へ
新着記事
New1
Play Framework
Play Frameworkでフォームデータをコントローラで扱う方法を完全解説|Java初心者向けコントローラ入門
New2
Jakarta EE
Jakarta EE JSPにおけるJSTLとスクリプトレットの違いと使い分けを初心者向けに徹底解説
New3
Play Framework
Play Frameworkでクエリパラメータをコントローラで処理する方法を完全解説|Java初心者向け入門
New4
Play Framework
Play FrameworkとSpring Bootの違いを徹底比較!初心者でもわかるJavaフレームワーク入門
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta EEのリリースサイクルとバージョンの進化をやさしく解説!
No.2
Java&Spring記事人気No2
Jakarta EE
Jakarta サーブレットのHttpServletRequestを徹底解説!初心者でもわかる基本操作と使い方
No.3
Java&Spring記事人気No3
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!
No.4
Java&Spring記事人気No4
Jakarta EE
Jakarta EEとJava EEアプリの互換性を完全解説!移行で困らないための基礎知識
No.5
Java&Spring記事人気No5
Jakarta EE
Jakarta EE JSPにおけるJSTL国際化タグ(fmt:message)の使い方を初心者向けに完全解説
No.6
Java&Spring記事人気No6
Jakarta EE
Jakarta EE JSPでJSTL SQLタグを使った簡易データベースアクセスをやさしく解説
No.7
Java&Spring記事人気No7
Jakarta EE
Jakarta EE JSPでJSTLを使ったJSONやREST APIレスポンス処理を初心者向けにやさしく解説
No.8
Java&Spring記事人気No8
Play Framework
Play Frameworkでリクエストデータの受け取り方を完全解説|Java初心者向けコントローラ入門