カテゴリ: Spring 更新日: 2025/12/11

Spring Securityでフォームログインを実装!ログイン・ログアウト・Remember-Meの設定方法まとめ

フォームログイン実装:ログイン/ログアウト/Remember-Me の設定
フォームログイン実装:ログイン/ログアウト/Remember-Me の設定

教材紹介 Spring Boot 学習のおすすめ教材

Spring Bootを使ったWebアプリケーション開発を、 環境構築から実践まで一通り学びたい方には、 定評のある入門書が参考になります。

Spring Boot 3 プログラミング入門をAmazonで見る

※ Amazon広告リンク

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

生徒

「ログイン機能をSpring Securityで作りたいのですが、何から始めたらよいでしょうか?」

先生

「まずは、Spring Securityを使ってフォームログインを設定しましょう。基本的な構成を理解することで、ログイン・ログアウト・Remember-Meといった機能を簡単に実装できますよ。」

生徒

「Remember-Meって何ですか?」

先生

「Remember-Meは、ログイン状態をブラウザに保存して、次回訪問時に再ログインなしでアクセスできる機能です。セキュリティの観点でも設定の注意点がありますよ。」

1. Spring Securityでフォームログインを有効にするには?

1. Spring Securityでフォームログインを有効にするには?
1. Spring Securityでフォームログインを有効にするには?

Spring Securityでは、フォームログイン(form-based login)を簡単に設定できます。基本的な設定をSecurityFilterChainで行い、ログインページやログイン成功後の遷移先などを定義できます。

以下は、ログインページをカスタムし、ログアウトとRemember-Me機能を追加した基本設定の例です。


@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/login", "/css/**").permitAll()
                .anyRequest().authenticated()
            )
            .formLogin(form -> form
                .loginPage("/login")
                .defaultSuccessUrl("/home", true)
                .permitAll()
            )
            .logout(logout -> logout
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login?logout")
                .permitAll()
            )
            .rememberMe(remember -> remember
                .key("uniqueAndSecret")
                .tokenValiditySeconds(86400)
            );
        return http.build();
    }
}

2. ログインページのHTMLを作成しよう

2. ログインページのHTMLを作成しよう
2. ログインページのHTMLを作成しよう

フォームログインに対応するために、自作のログイン画面を作成します。ユーザー名とパスワードをPOSTするようにしておけば、Spring Securityが自動的に処理してくれます。


<!DOCTYPE html>
<html>
<head>
    <title>ログイン</title>
</head>
<body>
    <h2 id="mokuji_3">ログイン画面</h2><!-- ここに画像を追加 ★NoImageはあとで書き換え★ -->
						            <div class="position-relative text-center image-overlay mb-3">
						                <img src="/img/view/java-exception-introduce-03.jpg?1" class="img-fluid" alt="ログイン画面" onerror="this.onerror=null; this.src='/img/view/java-exception-introduce.jpg';">
						                <div class="overlay"></div>
						                <div class="position-absolute top-50 start-50 translate-middle text-white fw-bold img-overlay-text2">ログイン画面</div>
						            </div>
    <form method="post" action="/login">
        <label>ユーザー名:</label>
        <input type="text" name="username">
        <br>
        <label>パスワード:</label>
        <input type="password" name="password">
        <br>
        <label>
            <input type="checkbox" name="remember-me"> ログイン状態を保持する
        </label>
        <br>
        <button type="submit">ログイン</button>
    </form>
</body>
</html>

3. ユーザー情報の管理と認証の仕組み

3. ユーザー情報の管理と認証の仕組み
3. ユーザー情報の管理と認証の仕組み

Spring Securityでは、ユーザー情報を管理するためにUserDetailsServiceを実装するのが一般的です。簡易的にはInMemoryUserDetailsManagerを使うことも可能です。


@Bean
public UserDetailsService userDetailsService() {
    UserDetails user = User.withDefaultPasswordEncoder()
        .username("user")
        .password("password")
        .roles("USER")
        .build();
    return new InMemoryUserDetailsManager(user);
}

実際の業務では、データベースと連携して認証情報を取得することが多く、Spring Data JPAと組み合わせてUserDetailsを実装するクラスを作成します。

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

Spring Framework超入門をAmazonで見る

※ Amazon広告リンク

4. Remember-Me機能のセキュリティ上の注意点

4. Remember-Me機能のセキュリティ上の注意点
4. Remember-Me機能のセキュリティ上の注意点

Remember-Me機能は便利ですが、セキュリティ面でのリスクもあります。特に以下の点に注意しましょう。

  • Remember-Meトークンにはkeyを指定し、予測困難な文字列を使う
  • トークンの有効期限は長すぎないようにする(例:1日=86400秒)
  • ユーザーが意図せず自動ログインされないように、チェックボックスによる明示的な同意を求める

5. ログアウトの設定と実装方法

5. ログアウトの設定と実装方法
5. ログアウトの設定と実装方法

Spring Securityでは、/logoutへのアクセスで自動的にログアウト処理が行われます。セッションの無効化やクッキーの削除なども自動で処理されます。

ログアウト完了後にリダイレクトするURLをlogoutSuccessUrl()で設定できます。

ログアウトボタンのHTMLは以下のように記述します。


<form method="post" action="/logout">
    <button type="submit">ログアウト</button>
</form>

6. Remember-Meのトークンをデータベースで管理するには?

6. Remember-Meのトークンをデータベースで管理するには?
6. Remember-Meのトークンをデータベースで管理するには?

Remember-Meのトークンをデータベースで管理したい場合は、PersistentTokenRepositoryを使います。これにより、サーバー側でトークン情報を管理できるため、安全性が向上します。


@Bean
public PersistentTokenRepository tokenRepository(DataSource dataSource) {
    JdbcTokenRepositoryImpl repo = new JdbcTokenRepositoryImpl();
    repo.setDataSource(dataSource);
    return repo;
}

そして、rememberMe().tokenRepository(tokenRepository)を設定に追加します。

7. よくあるエラーとその対処法

7. よくあるエラーとその対処法
7. よくあるエラーとその対処法

Spring Securityを使ったフォームログインでは、以下のようなトラブルがよく発生します。

  • ログインしてもすぐログアウトされる:Remember-Meの設定にミスがある、またはセッションが維持されていない可能性があります。
  • ログインページに遷移しない:フォームのactionmethodの指定が正しくない、/loginが許可されていないなど。
  • パスワードが平文で保存されている:withDefaultPasswordEncoder()は開発用途のみ。本番ではBCryptなどを使用する。

まとめ

まとめ
まとめ

この記事では、Spring Securityを利用したフォームログインの基本構成を中心に、ログイン画面の作成方法、ユーザー認証の仕組み、Remember-Me機能の注意点、ログアウト処理の流れ、そしてデータベースを用いたトークン管理までを体系的に学びました。とくにSpring Securityは多機能で柔軟な設定が可能なため、適切なセキュリティ対策を施しながら運用しやすい構成を組み立てることが重要です。ログインフォームの設計ひとつ取っても、認証処理、エラーハンドリング、Remember-Meチェック、セッション管理など複数の視点で考慮しなければなりません。こうした点を踏まえながら、実践的なアプリケーションの構築に活かすことができます。 また、データベースを使ったRemember-Meトークンの保存は、より信頼性の高い認証管理を実現するための有効な手段です。トークンの更新や削除をサーバー側で管理することで、ユーザーが複数端末を利用する場合にも安全に自動ログインを提供できます。さらに、Spring Securityでよく発生するエラーについても触れたため、開発中のデバッグにも役立つ知識として整理できたはずです。 下記では、振り返りとして簡単なカスタム設定のサンプルコードを掲載しつつ、先生と生徒の会話形式で理解の深まりを確認します。

サンプルプログラム:振り返り用の基本設定例


@Configuration
@EnableWebSecurity
public class ReviewSecurityConfig {

    @Bean
    public SecurityFilterChain filter(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/login", "/public/**").permitAll()
                .anyRequest().authenticated()
            )
            .formLogin(form -> form
                .loginPage("/login")
                .defaultSuccessUrl("/dashboard", true)
            )
            .rememberMe(remember -> remember
                .key("secureKeySample2025")
                .tokenValiditySeconds(43200)
            )
            .logout(logout -> logout
                .logoutUrl("/logout")
                .logoutSuccessUrl("/login?completed")
            );
        return http.build();
    }
}

先生と生徒の振り返り会話

生徒

「フォームログインの流れがだいぶ理解できました。特にログイン後の遷移やRemember-Meの挙動が明確になりました。」

先生

「よかったですね。Remember-Meは便利ですが、トークン管理を誤るとセキュリティ上のリスクにつながるため、今回学んだように予測しにくいキーを設定することが大切です。」

生徒

「ログアウト設定も簡単で驚きました。自動でセッションを無効化してくれるなら、かなり安心して使えます。」

先生

「その通りです。Spring Securityは標準で安全な仕組みが整っているので、基本を押さえておくと応用がとてもやりやすくなりますよ。」

生徒

「次はデータベース連携のUserDetailsServiceをもっと深く学びたいです!」

先生

「ぜひ取り組んでください。認証と権限制御の理解が深まると、より安全で拡張性の高いアプリケーションを作れるようになりますよ。」

カテゴリの一覧へ
新着記事
JavaのIndexOutOfBoundsExceptionを完全ガイド!初心者でも理解できる例外処理と回避方法
スッキリわかるJava入門 第4版|独学でもレッスンでも学べる完全ガイド
JavaのCookieクラスのgetCommentメソッドを解説!Servlet開発でクッキーの説明文を取得する方法
JavaのBufferedOutputStreamクラスのwriteメソッドを徹底解説!初心者でもわかるファイルへのバイナリ書き込み
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.3
Java&Spring記事人気No3
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ
No.4
Java&Spring記事人気No4
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
No.5
Java&Spring記事人気No5
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.6
Java&Spring記事人気No6
Thymeleaf(タイムリーフ)入門!初心者でもわかるSpring Bootとテンプレートエンジンの使い方
No.7
Java&Spring記事人気No7
Springの@Repositoryアノテーションの使い方を徹底解説!初心者でもわかるSpringフレームワークのデータアクセス
No.8
Java&Spring記事人気No8
JavaのArrayListクラスとgetメソッドを完全解説!初心者でもわかるリストの要素取得

💻 作業効率アップに

長時間のコーディングでも疲れにくい♪ 静音ワイヤレスマウス

Logicool Signature M750 を見る

※ Amazon広告リンク