カテゴリ: Spring認証(Spring Security) 更新日: 2026/01/05

Spring Securityのログイン設定を完全解説!HttpSecurityでログインフォームを構築する方法

ログイン・ログアウトの設定(HttpSecurityの設定)
ログイン・ログアウトの設定(HttpSecurityの設定)

新人と先輩の会話形式で理解しよう

新人

「先輩、Webアプリケーションでのログイン処理って、そもそもどういう意味なんですか?」

先輩

「ログイン処理は、ユーザーが誰なのかを確認して、その人専用の機能を提供するための入り口なんだよ。特にセキュリティが必要な画面では重要になるね。」

新人

「なるほど…。じゃあSpring Securityを使えば簡単にログイン機能が作れるんですか?」

先輩

「そうそう。Spring SecurityにはHttpSecurityを使ったログイン設定があって、ログインフォームの表示やユーザー認証の仕組みをまとめて管理できるよ。」

新人

「そのHttpSecurityって具体的にどう設定すればいいんでしょうか?」

先輩

「それじゃ、ログインの仕組みと一緒に詳しく見ていこうか!」

1. ログイン処理とは何か?(Webアプリケーションにおける役割)

1. ログイン処理とは何か?(Webアプリケーションにおける役割)
1. ログイン処理とは何か?(Webアプリケーションにおける役割)

ログイン処理とは、Webアプリケーションで利用者が自分の身元を証明するための操作のことです。ユーザー名とパスワードを入力し、正しければシステムがそのユーザーを認証し、アクセス制御を適用します。これは、ショッピングサイトの「マイページ」や管理者専用ページなど、本人以外に見せてはいけない情報を守るために欠かせません。

ログイン機能がないと、誰がアクセスしているのか判断できず、全てのユーザーに同じ画面しか見せられなくなります。そのため、ログインはWebアプリケーションにおいて非常に基本的かつ重要な機能です。

そして、ログインに成功した後はセッション情報を使ってログイン状態を管理し、ユーザーが再びパスワードを入力することなく操作できるようになります。

2. Spring Securityにおけるログインの仕組み(HttpSecurityとの関係)

2. Spring Securityにおけるログインの仕組み(HttpSecurityとの関係)
2. Spring Securityにおけるログインの仕組み(HttpSecurityとの関係)

Spring Securityでは、ログイン処理を簡単に実装できる仕組みが用意されています。特に中心になるのが、HttpSecurityという設定クラスです。これを使うことで、どのURLにログイン画面を表示するか、ログイン成功後の遷移先はどこにするかなど、細かく設定できます。

たとえば、以下のような設定をSecurityConfigというクラスで行います。


@Configuration
@EnableWebSecurity
public class SecurityConfig {

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

この設定では、まず「/login」や静的リソース(CSSやJS)へのアクセスは誰でもOKにし、それ以外のページにはログインが必要になるようにしています。

formLogin()の中では、ログインフォームのURLや、ログイン成功後に遷移するページを指定します。また、logout()でログアウト時のリダイレクト先も設定しています。

これにより、ログインフォームを表示し、正しい認証情報が入力されると自動的にセッションが生成されてログイン状態が維持されます。

このように、Spring SecurityのHttpSecurityを使えば、ログイン設定や認証処理、ログインフォームの動作まで一括して構成することができます。

ログインフォーム自体のHTMLは、次のように簡単に作成できます。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>ログイン</title>
</head>
<body>
    <form th:action="@{/login}" method="post">
        <label>ユーザー名:</label>
        <input type="text" name="username" />
        <br/>
        <label>パスワード:</label>
        <input type="password" name="password" />
        <br/>
        <button type="submit">ログイン</button>
    </form>
</body>
</html>

このHTMLでは、Spring Securityが用意している/loginというエンドポイントに対してPOSTでユーザー名とパスワードを送信しています。これはHttpSecurityformLogin()設定と連携して動作します。

このように、ログインフォームを独自に作成しながらも、セキュリティ設定はSpring Security側に任せることで、安全性の高いログイン処理が可能になります。

3. HttpSecurityの設定項目の詳細(formLogin, loginPage, successUrlなど)

3. HttpSecurityの設定項目の詳細(formLogin, loginPage, successUrlなど)
3. HttpSecurityの設定項目の詳細(formLogin, loginPage, successUrlなど)

Spring Securityでログインフォームを設定する際に中心となるのが、formLogin()メソッドです。この中でログインページのURLやログイン成功後の遷移先など、細かい設定を行います。

まず、loginPage()を使うことで、独自のログインページを指定できます。デフォルトではSpring Securityが用意した標準のログインページが表示されますが、自分で作成したHTMLファイルを使いたい場合はこの設定が必要です。

続いて、defaultSuccessUrl()はログインが成功した後に遷移するURLを指定するためのものです。たとえば、ログイン後にユーザー専用ページである「/home」へ遷移させる設定は以下のようになります。


http.formLogin(form -> form
    .loginPage("/login")
    .defaultSuccessUrl("/home", true)
    .permitAll()
);

このdefaultSuccessUrl("/home", true)の「true」は、ログイン前にアクセスしようとしていたページがあっても無視して、常に「/home」にリダイレクトするという意味です。

また、permitAll()を記述することで、ログインページ自体へのアクセスを誰でも許可することができます。これを忘れると、ログインページにも認証が必要となり、ループ状態になってしまうので注意が必要です。

さらに、failureUrl()を指定すると、ログインに失敗した際の遷移先を設定できます。例えば以下のように設定すれば、ログイン失敗時に「/login?error」へ遷移させられます。


http.formLogin(form -> form
    .loginPage("/login")
    .defaultSuccessUrl("/home", true)
    .failureUrl("/login?error")
    .permitAll()
);

このように、HttpSecurityの設定では、ログインに関する細かい挙動を柔軟に制御できます。ログインフォームの挙動を理解し、適切な画面遷移を構築することで、ユーザーにとって使いやすい認証機能を提供できます。

ログイン成功後の画面としては、「ホーム画面」や「ダッシュボード」などが一般的で、ユーザー専用情報を表示させるページとして設計するとよいでしょう。

4. Spring Securityでのログアウトの基本(logout, logoutSuccessUrlなど)

4. Spring Securityでのログアウトの基本(logout, logoutSuccessUrlなど)
4. Spring Securityでのログアウトの基本(logout, logoutSuccessUrlなど)

ログインがあるアプリケーションには、当然ながらログアウト処理も必要です。Spring Securityでは、logout()メソッドを使って簡単にログアウトの設定が行えます。

ログアウトの基本的な設定は、以下のように記述します。


http.logout(logout -> logout
    .logoutUrl("/logout")
    .logoutSuccessUrl("/login?logout")
    .permitAll()
);

logoutUrl()はログアウトのためのリクエストパスを指定します。通常、ログアウトボタンを押したときにこのURLに対してPOSTリクエストが送信されます。

logoutSuccessUrl()はログアウト完了後に遷移するURLです。たとえば「/login?logout」とすることで、ログアウト後に再びログインページへリダイレクトし、「ログアウトが完了しました」といったメッセージを表示することができます。

ログアウト処理では、セッションを破棄してログイン状態を無効にすることが自動的に行われるため、特別な処理を記述しなくても安全なログアウトが実現できます。

以下は、ログアウトリンクのHTMLの一例です。


<form th:action="@{/logout}" method="post">
    <button type="submit">ログアウト</button>
</form>

このように、フォーム形式でPOSTリクエストを送ることで、Spring Securityが自動的にログアウト処理を実行します。なお、GETメソッドでログアウトするのはセキュリティ上のリスクがあるため、Spring SecurityではデフォルトでPOSTリクエストに限定されています。

また、Spring Securityの設定方法として、logout()logoutSuccessUrl()を適切に使うことで、ユーザーが自然な流れでログアウト操作を完了できるようになります。

ログアウト後にリダイレクトされるページには、「ログアウトしました」などのメッセージを表示して、ユーザーに安心感を与える設計が求められます。

たとえば、ログアウト後に表示されるHTMLには以下のような表示を加えるとよいでしょう。


<div th:if="${param.logout}">
    <p>ログアウトが完了しました。</p>
</div>

このようにして、ユーザーがログアウト後にログアウト完了の確認をできるようにすることも大切です。

以上のように、Spring Security 設定方法ではログアウト処理もHttpSecurityの中でしっかり設定できます。ログアウトURLを決め、ログアウト後の遷移先や処理を整理することで、より安全でわかりやすいWebアプリケーションを構築できます。

5. カスタムログインページを使った設定例

5. カスタムログインページを使った設定例
5. カスタムログインページを使った設定例

Spring Securityでは、デフォルトのログインページだけでなく、自分でデザインしたカスタムログイン画面を使うことができます。これにより、見た目を統一しながら、ブランドイメージに合ったログイン機能を実装できます。

まず、loginPage("/login")で指定したURLに対応するHTMLファイルを作成します。Spring BootのThymeleafを使っている場合、「src/main/resources/templates/login.html」に次のようなファイルを置きます。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>ログインページ</title>
</head>
<body>
    <h2>ログインフォーム</h2>
    <form th:action="@{/login}" method="post">
        <label>ユーザー名:</label>
        <input type="text" name="username" />
        <br/>
        <label>パスワード:</label>
        <input type="password" name="password" />
        <br/>
        <div th:if="${param.error}">
            <p style="color:red;">ログインに失敗しました。</p>
        </div>
        <div th:if="${param.logout}">
            <p style="color:green;">ログアウトしました。</p>
        </div>
        <button type="submit">ログイン</button>
    </form>
</body>
</html>

このカスタムログイン画面は、HttpSecurityの設定で指定したloginPage("/login")と連携します。ログイン失敗時やログアウト後のメッセージ表示にも対応しており、ユーザーの操作が分かりやすくなります。

このように独自に作成したログイン画面を組み込むことで、ユーザーにとって使いやすいインターフェースを提供しながら、セキュリティ要件も満たすことができます。

6. ログアウト時の処理(セッション削除やリダイレクトの実装)

6. ログアウト時の処理(セッション削除やリダイレクトの実装)
6. ログアウト時の処理(セッション削除やリダイレクトの実装)

Spring Securityでのログアウト処理は、HttpSecuritylogout()を設定するだけで基本的な機能は備わります。しかし、ユーザー体験を高めるには、ログアウト後の画面遷移やセッション情報の明示的な削除など、さらに細かい対応が必要です。

ログアウトすると自動的にセッション情報は破棄されますが、確実に行うためにinvalidateHttpSession(true)clearAuthentication(true)を追加することが推奨されます。


http.logout(logout -> logout
    .logoutUrl("/logout")
    .logoutSuccessUrl("/login?logout")
    .invalidateHttpSession(true)
    .clearAuthentication(true)
    .permitAll()
);

このように設定することで、ログアウト時にセッションを破棄し、認証情報を明示的に削除できます。これにより、セキュリティ上のリスクを最小限に抑えることができます。

また、ログアウト後の画面では、「ログアウトが正常に完了しました」と表示するなど、ユーザーに安心感を与える表現を入れるとより親切です。リダイレクト先の/login?logoutに対応するログイン画面に、次のような処理を記述します。


<div th:if="${param.logout}">
    <p>ログアウトが正常に完了しました。</p>
</div>

このように、ログアウト後の処理を丁寧に設計することで、セキュリティとユーザー体験の両立が可能になります。見た目上の分かりやすさと技術的な堅牢性の両面を意識することが大切です。

7. 実際のプロジェクトでの活用例(基本パターンと応用パターン)

7. 実際のプロジェクトでの活用例(基本パターンと応用パターン)
7. 実際のプロジェクトでの活用例(基本パターンと応用パターン)

最後に、Spring Security活用例として、実際の開発現場でよく使われる構成パターンを紹介します。

まず基本的なパターンとしては、ユーザー登録済みの認証情報(ユーザー名とパスワード)をapplication.ymlinMemoryUserDetailsManagerなどで定義し、ログイン機能を素早く導入するものです。

これに対して応用パターンとしては、データベースと連携し、ユーザー情報をDBから読み取ってログインを行う方法があります。この場合、UserDetailsServiceの実装クラスを用意し、認証情報をDBに問い合わせます。


@Service
public class CustomUserDetailsService implements UserDetailsService {
    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        UserEntity user = userRepository.findByUsername(username);
        if (user == null) {
            throw new UsernameNotFoundException("ユーザーが見つかりませんでした");
        }
        return new User(user.getUsername(), user.getPassword(), AuthorityUtils.createAuthorityList("ROLE_USER"));
    }
}

このように、DBと連携したHttpSecurity設定例では、セキュアな認証処理が実現できます。プロジェクトが成長していくと、ログイン後の画面や権限管理がより複雑になりますが、Spring Securityはそれらに柔軟に対応できるのが強みです。

たとえば、管理者と一般ユーザーで表示するページを切り替える場合、hasRole()access()を使ったURL制御が役立ちます。以下のような設定です。


http.authorizeHttpRequests(auth -> auth
    .requestMatchers("/admin/**").hasRole("ADMIN")
    .requestMatchers("/user/**").hasRole("USER")
    .anyRequest().authenticated()
);

このような応用的な使い方を学ぶことで、より実践的なログイン・ログアウト処理を構築できます。初めはシンプルな構成から始めて、徐々に機能を追加していくと理解が深まります。

Spring Security活用例を知ることで、今後の開発で柔軟かつ安全な認証機能をスムーズに実装できるようになるでしょう。

まとめ

まとめ
まとめ

Spring Securityにおけるログイン設定の全体像を振り返る

ここまでの記事では、Spring Securityを使ったログイン設定について、 HttpSecurityを中心に、ログインフォームの構築方法やログイン成功・失敗時の挙動、 さらにログアウト処理まで、段階的に解説してきました。 Webアプリケーションにおけるログイン処理は、 単にユーザー名とパスワードを確認するだけではなく、 誰がどの画面にアクセスできるのかを制御する重要な役割を担っています。

Spring Securityを導入することで、 これらの複雑になりがちな処理をフレームワークに任せることができ、 開発者はアプリケーション本来の機能に集中できます。 特にHttpSecurityは、ログイン画面のURL指定や、 認証が必要なURLの範囲、ログイン後の遷移先などを一元的に管理できるため、 ログイン設定の中核となる存在です。

本記事で紹介したように、 formLogin、loginPage、defaultSuccessUrl、failureUrl、logout、logoutSuccessUrlといった設定を 正しく理解して組み合わせることで、 ユーザーにとって分かりやすく、安全性の高いログイン機能を構築できます。 これは、小規模な学習用アプリケーションだけでなく、 実務レベルのWebアプリケーションでもそのまま活用できる知識です。

ログインとログアウトはセットで考える

ログイン処理に注目しがちですが、 実際のアプリケーションではログアウトの設計も同じくらい重要です。 Spring Securityでは、logout設定を行うだけで、 セッションの破棄や認証情報のクリアを安全に実行できます。

ログアウト後にどの画面へ遷移させるのか、 ユーザーにどのようなメッセージを表示するのかといった点を丁寧に設計することで、 利用者に安心感を与えることができます。 こうした細かな配慮が、 Webアプリケーション全体の使いやすさにつながります。


http
    .formLogin(form -> form
        .loginPage("/login")
        .defaultSuccessUrl("/home", true)
        .failureUrl("/login?error")
        .permitAll()
    )
    .logout(logout -> logout
        .logoutUrl("/logout")
        .logoutSuccessUrl("/login?logout")
        .invalidateHttpSession(true)
        .clearAuthentication(true)
        .permitAll()
    );

この設定例を見ると分かるように、 ログインとログアウトはHttpSecurityの中で一貫して管理できます。 これにより、設定の見通しが良くなり、 後から機能を拡張する際にも修正しやすくなります。

実務につながる理解ポイント

Spring Securityのログイン設定を学ぶうえで大切なのは、 設定の書き方を丸暗記することではありません。 なぜその設定が必要なのか、 どのタイミングで認証が行われ、 どのようにセッションが管理されているのかを理解することが重要です。

HttpSecurityは「ルールを書く場所」であり、 formLoginやlogoutは「ログインとログアウトの振る舞いを決める宣言」だと捉えると、 設定全体が整理されて見えてきます。 この考え方を身につけることで、 データベース連携や権限管理といった応用的な内容にもスムーズに進めるようになります。

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

生徒

「Spring Securityのログイン設定って、 最初は難しそうに感じましたけど、 HttpSecurityの役割が分かると整理できました」

先生

「それは良い理解ですね。 ログイン設定は点で覚えるより、 全体の流れとして捉えることが大切です」

生徒

「ログインだけでなく、 ログアウトやログイン失敗時の画面遷移まで 考える必要があるのも分かりました」

先生

「実際のWebアプリケーションでは、 そのあたりの設計がユーザー体験に直結します。 今回学んだ設定は、そのまま実務でも役立ちますよ」

生徒

「まずは今回の構成をベースに、 自分のアプリでもログイン機能を作ってみます」

先生

「それが一番の近道です。 実際に動かしながら理解を深めていきましょう」

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

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

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

Spring Securityのログイン処理は何のために必要なのですか?

ログイン処理は、Webアプリケーションでユーザーが本人であることを確認し、その人専用のページや機能を安全に提供するために必要です。認証されたユーザーだけがアクセスできるようにするため、セキュリティ確保の基本です。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
Spring認証(Spring Security)
Spring BootでCORSを設定する方法を完全解説!初心者でもわかるセキュリティ対策
New2
Spring認証(Spring Security)
パスワードをハッシュ化する理由とは?セキュリティ対策の基本をSpring Securityで学ぼう
New3
SpringのWeb開発(Spring MVC)
HTTPリクエストとレスポンスの基本を完全解説!Spring MVC初心者がWeb通信の仕組みをやさしく理解
New4
Spring認証(Spring Security)
ブラウザからのフォーム送信とは?HTTPリクエストの基礎を初心者向けに解説!
人気記事
No.1
Java&Spring記事人気No1
SpringのWeb開発(Spring MVC)
ルーティングとは?基本概念(Spring MVCのURL制御を理解)
No.2
Java&Spring記事人気No2
Thymeleaf
Thymeleaf とは?初心者向けにThymeleafの基本を徹底解説
No.3
Java&Spring記事人気No3
Springの基本
application.properties と YAML の基本をやさしく解説!初心者向けSpring Boot設定ファイル入門
No.4
Java&Spring記事人気No4
Springの基本
Spring Bootのデフォルトログ設定を徹底解説(Logback / SLF4J)
No.5
Java&Spring記事人気No5
Springの基本
Spring Bootの環境変数の設定方法をやさしく解説!初心者向けapplication.propertiesの使い方
No.6
Java&Spring記事人気No6
SpringのDB操作
JPAの標準クエリメソッド(findById, findAll)を完全解説!初心者でもわかるデータ取得の基本
No.7
Java&Spring記事人気No7
SpringのWeb開発(Spring MVC)
ループ処理(th:each)の基本を完全ガイド!Thymeafの繰り返し処理の使い方
No.8
Java&Spring記事人気No8
Spring認証(Spring Security)
セッション管理の基本(@SessionAttributes)を完全解説!初心者でもわかるセッションの仕組み