カテゴリ: Spring 更新日: 2025/12/18
PR
独学でJavaを学んでいる方向け
「実務レベルに到達できるか不安」「1人だと詰まることが多い」場合は、 実践重視で学べる環境を一度確認しておくのも一つの手です。
EBAエデュケーション |学習内容・サポートを見る

Spring Securityのセッション管理を完全理解!SessionManagementConfigurerで並行ログインを制御する方法

セッション管理と並行ログイン制御:SessionManagementConfigurer
セッション管理と並行ログイン制御:SessionManagementConfigurer

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

生徒

「ログイン中に別のブラウザで同じアカウントを使うと、どうなるんですか?」

先生

「それは並行ログインと呼ばれる状況ですね。Spring Securityでは、セッション管理の設定で制御できますよ。」

生徒

「セッションって具体的にどんな役割なんですか?どうやって制御するんですか?」

先生

「それでは、SessionManagementConfigurerの使い方と、並行ログイン制御の方法を一緒に学んでいきましょう。」

1. セッションとは?Spring Securityでの役割

1. セッションとは?Spring Securityでの役割
1. セッションとは?Spring Securityでの役割

セッションとは、ユーザーがログインしてからログアウトするまでの間に維持される情報の保存領域です。Spring Securityでは、ログインユーザーの認証情報や状態をセッションで保持します。

セッションがあることで、リクエストごとに再ログインせずに済み、ログイン状態を維持したまま複数の画面を行き来できます。

逆に言えば、セッションが切れた場合は再認証が必要になるため、セキュリティ上の制御点としても重要です。

2. Spring Securityのセッション管理の基本

2. Spring Securityのセッション管理の基本
2. Spring Securityのセッション管理の基本

Spring Securityでは、セッションの数や有効期限、タイムアウトなどをHttpSecurityの中で細かく制御できます。セッション管理を有効にするには、sessionManagement()メソッドを使用します。

このメソッドを使うことで、最大セッション数の設定、ログイン時の挙動、セッションの無効化処理などを行えます。

PR

将来を見据えて、+αのスキルを身につけたい方へ

JavaやLinuxを学んでいても、「このままで市場価値は上がるのか」 「キャリアの選択肢を広げたい」と感じる方は少なくありません。

AIを学ぶならアイデミープレミアム

3. SessionManagementConfigurerの概要

3. SessionManagementConfigurerの概要
3. SessionManagementConfigurerの概要

SessionManagementConfigurerは、Spring Securityのセッション管理を行うための設定クラスです。セッション数の上限、並行ログインの許可・制限、セッション固定攻撃対策などを設定できます。

この設定を活用することで、例えば「同じアカウントで複数ブラウザからの同時ログインを禁止する」といったことが実現可能になります。

4. 並行ログイン(Concurrent Session)とは?

4. 並行ログイン(Concurrent Session)とは?
4. 並行ログイン(Concurrent Session)とは?

並行ログインとは、同じアカウントを使って複数のデバイス・ブラウザ・タブから同時にログインする状況です。セキュリティの観点では、企業システムなどではこれを禁止するケースが多くあります。

Spring Securityでは、この並行ログインを制御する設定がmaximumSessions()です。

5. 最大セッション数を制御する設定例

5. 最大セッション数を制御する設定例
5. 最大セッション数を制御する設定例

以下は、同時ログインを1セッションに制限し、別のログインが発生したら前のセッションを無効化する例です。


@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .anyRequest().authenticated()
            )
            .formLogin()
            .and()
            .sessionManagement(session -> session
                .maximumSessions(1)
                .maxSessionsPreventsLogin(false)
            );

        return http.build();
    }
}

maximumSessions(1)で同時ログインを1つに制限し、maxSessionsPreventsLogin(false)で新しいログインを許可しつつ、古いセッションを無効化します。

6. 前のセッションを拒否する設定

6. 前のセッションを拒否する設定
6. 前のセッションを拒否する設定

逆に、新しいログインを拒否して「すでにログイン中です」と表示させたい場合は、maxSessionsPreventsLogin(true)を指定します。


.sessionManagement(session -> session
    .maximumSessions(1)
    .maxSessionsPreventsLogin(true)
)

この設定を使えば、ログイン済みのユーザーが他の端末やブラウザからログインしようとしたときに、エラー画面にリダイレクトすることができます。

7. セッションの有効期限とタイムアウト設定

7. セッションの有効期限とタイムアウト設定
7. セッションの有効期限とタイムアウト設定

セッションのタイムアウト(一定時間アクセスがなければ自動ログアウト)は、application.propertiesまたはapplication.ymlで次のように設定できます。


server.servlet.session.timeout=15m

この設定により、15分間操作がなければセッションが無効化され、ログイン画面にリダイレクトされるようになります。

8. セッション情報を保持するSessionRegistryの活用

8. セッション情報を保持するSessionRegistryの活用
8. セッション情報を保持するSessionRegistryの活用

セッションを監視・管理したい場合は、SessionRegistryを使って現在ログイン中のユーザー一覧を取得できます。


@Bean
public SessionRegistry sessionRegistry() {
    return new SessionRegistryImpl();
}

このBeanを使えば、ログインユーザーの一覧を管理画面に表示したり、不正アクセスを検出するための仕組みに応用することも可能です。

9. セッション管理の注意点とベストプラクティス

9. セッション管理の注意点とベストプラクティス
9. セッション管理の注意点とベストプラクティス
  • セッションの数を制限することで、不正な同時ログインの抑止になる
  • スマートフォン・PC両方から使う場合は制限しすぎるとユーザビリティが落ちる
  • セッション固定攻撃対策としてsessionFixation().migrateSession()も併用する
  • ログアウト時にはセッション削除処理を確実に行うようにする

セッション管理はセキュリティの基本でありながら、柔軟に制御できる部分でもあります。要件に応じて適切な構成を選びましょう。

Spring FrameworkやThymeleafを使った Webアプリ開発の全体像をやさしく理解したい人には、 この入門書が定番です。

Spring Framework超入門をAmazonで見る

※ Amazonアソシエイト・プログラムを利用しています

カテゴリの一覧へ
新着記事
PR

JavaやLinuxの検証環境に
低コストで使えるVPS

Thymeleafのth:blockの使い方を完全ガイド!初心者でもわかるテンプレートブロック管理
Thymeleafのth:selected属性の使い方を完全解説!初心者でもわかるセレクトボックス選択状態の指定方法
Spring MVCのルーティング設計をマスター!初心者向け@GetMappingと@PostMappingの基本と命名ルール
JSPのコメントタグとHTMLコメントの違いを徹底解説!初心者向けわかりやすい使い分け講座
PR 未経験からITエンジニアを目指す方へ

Javaを学んでいるけど、「このまま未経験で就職できるか不安」という20代向け。 学歴不問・無料サポートの就職支援という選択肢があります。

Tamesy |無料で面談予約
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
JavaのArrayListクラスとgetメソッドを完全解説!初心者でもわかるリストの要素取得
No.3
Java&Spring記事人気No3
JavaのIntegerクラスparseIntメソッド完全ガイド!初心者でもわかる文字列から数値変換
No.4
Java&Spring記事人気No4
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.5
Java&Spring記事人気No5
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
No.6
Java&Spring記事人気No6
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.7
Java&Spring記事人気No7
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.8
Java&Spring記事人気No8
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
PR

ローカルPCに依存しない開発環境という選択肢

Java・Linuxの検証や学習環境を、クラウド上ですぐに用意できます。

Java入門

Javaの基礎を体系的に学びたい場合は、文法だけでなく 「なぜそう書くのか」まで丁寧に解説されているため、 初心者でも理解しやすい定番の1冊です。

スッキリわかるJava入門 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Java実践

ジェネリクス、enum、シールクラスなどの型設計から、 関数型プログラミング(ラムダ式・Stream API)、 JVM制御やリフレクション、外部ライブラリの活用までを扱っており、 「Javaを使えるレベル」へ進むための内容が網羅されています。

スッキリわかるJava入門 実践編 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Spring入門

Spring Frameworkの全体像から、 Webアプリ開発で必要となる主要機能までを 体系的に解説している定番の入門書です。

Spring徹底入門 第2版 Spring FrameworkによるJavaアプリケーション開発

※ 紙の書籍・電子書籍どちらでも購入できます

PR 実務経験のあるエンジニア向け

Javaなどの実務経験があり、次のキャリアを検討している方向け。 IT・ゲーム業界に特化した転職支援サービスという選択肢もあります。

転職ボックス |IT・ゲーム業界専門