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

Spring Securityで独自ユーザー名とパスワードを設定する方法【初心者向け】

独自ユーザー名・パスワードを設定するには?
独自ユーザー名・パスワードを設定するには?

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

新人

「Spring Securityを使ってログイン画面を作ろうと思うんですが、勝手にユーザー名とかパスワードが出てくるんですけど…あれってなんですか?」

先輩

「ああ、それはSpring Securityが自動的に用意してくれるデフォルトのユーザー名とパスワードなんだよ。」

新人

「なるほど…。でも、自分の好きなユーザー名とかパスワードにはできないんですか?」

先輩

「もちろんできるよ!じゃあ、今回はSpring Securityで独自のユーザー名とパスワードを設定する方法を、初歩から説明していこうか。」

1. Spring Securityが自動で生成するユーザー名とパスワードとは?

1. Spring Securityが自動で生成するユーザー名とパスワードとは?
1. Spring Securityが自動で生成するユーザー名とパスワードとは?

Spring Securityをプロジェクトに導入すると、特に何も設定をしなくても自動的にログイン認証が有効になります。これはSpring Securityが持っている「セキュリティの初期構成」によるもので、標準でログイン画面が表示されます。

その際、自動的に生成されたユーザー名とパスワードがコンソールに表示され、これを使えばログインできるようになります。

例えば、アプリケーションを起動すると、以下のようなメッセージが表示されます。


Using generated security password: 1a2b3c4d-5e6f-7g8h-9i0j-k1l2m3n4o5p6

このときのユーザー名はuserで、パスワードは起動のたびに違うランダムな文字列が生成されます。

これにより、Spring Securityがきちんと動作していることをすぐに確認できます。ただし、毎回違うパスワードでは実用的ではないため、独自のユーザー名とパスワードを設定したくなりますよね。

2. なぜ独自のユーザー名やパスワードを設定する必要があるのか?

2. なぜ独自のユーザー名やパスワードを設定する必要があるのか?
2. なぜ独自のユーザー名やパスワードを設定する必要があるのか?

Spring Securityの初期設定は開発やテストには便利ですが、実際の業務システムではユーザーごとの認証情報を管理する必要があります。例えば、以下のような理由があります。

  • 毎回パスワードが変わるとテストがしづらい
  • 固定のユーザー名・パスワードでログインしたい
  • 複数ユーザーのログイン認証を実装したい
  • 本番環境ではセキュリティ上、自動生成のパスワードは使えない

そのため、独自のユーザー名とパスワードapplication.propertiesapplication.ymlに設定しておくのが一般的です。

例えば、次のようにプロパティファイルに書くことで、固定のユーザー情報を使ったログインが可能になります。


spring.security.user.name=admin
spring.security.user.password=secret123

これを設定しておくと、アプリケーション起動後にadmin / secret123でログインできます。

なお、Spring Securityでは暗号化されたパスワードを使うのが推奨ですが、開発段階では平文での設定も許容されています。

この設定を行えば、毎回ランダムなパスワードを確認する手間がなくなり、チームで共有するテスト用アカウントも管理しやすくなります。

3. application.propertiesを使った独自ユーザー名とパスワードの設定手順

3. application.propertiesを使った独自ユーザー名とパスワードの設定手順
3. application.propertiesを使った独自ユーザー名とパスワードの設定手順

それでは、実際にSpring Securityで独自のユーザー名とパスワードを設定する方法を見ていきましょう。設定を行うファイルは、src/main/resources/application.propertiesです。このファイルにプロパティを記述することで、Spring Securityの挙動を簡単にカスタマイズできます。

今回は、ユーザー名を「admin」、パスワードを「secret123」にしてみましょう。次のように記述します。


spring.security.user.name=admin
spring.security.user.password=secret123

この設定を保存したあと、Spring Bootアプリケーションを再起動してください。

再起動すると、先ほどまで表示されていた「ランダムなセキュリティパスワード」のメッセージがコンソールに出力されなくなります。代わりに、先ほど設定した「admin」と「secret123」でログインできるようになります。

この設定により、Spring Securityのログイン画面で独自ユーザー名とパスワードによるユーザー認証が可能になります。

また、application.ymlを使いたい場合は、以下のように記述すれば同様の設定が可能です。


spring:
  security:
    user:
      name: admin
      password: secret123

ただし、本記事ではapplication.properties形式での解説を中心に進めていきます。

4. 設定後の動作確認とSpring Securityのログイン画面の挙動

4. 設定後の動作確認とSpring Securityのログイン画面の挙動
4. 設定後の動作確認とSpring Securityのログイン画面の挙動

設定ファイルを保存してアプリケーションを再起動した後、ブラウザでhttp://localhost:8080にアクセスしてみてください。すると、Spring Securityが自動で生成したログイン画面が表示されます。

以下のようなシンプルな画面が出てくるはずです。

  • ユーザー名(Username)入力欄
  • パスワード(Password)入力欄
  • 「Sign in」ボタン

ここで先ほどapplication.propertiesに設定した「admin」と「secret123」を入力して「Sign in」ボタンを押すと、ログイン処理が行われます。

もし認証が成功すると、以下のように表示されます。


Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue Sep 10 00:00:00 JST 2025
There was an unexpected error (type=Forbidden, status=403).
Forbidden

この画面が出る理由は、ログインには成功したものの、まだ表示する画面(=コントローラ)が設定されていないためです。Spring Securityが保護するURLにアクセスしたとき、適切なページが用意されていないとこのようなエラーページになります。

このような場合、ログイン後に表示させる画面を用意しておくことでスムーズな認証の流れを作ることができます。ここでは、簡単なログイン後の画面を@Controllerを使って作成してみましょう。


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @GetMapping("/")
    public String home() {
        return "home";
    }
}

上記のように@Controllerを使ってトップページにアクセスしたときの画面を作成しておくと、ログイン後に自動的に/にリダイレクトされても正常に画面を表示できます。

そして、このhomeに対応するHTMLファイルをsrc/main/resources/templatesに配置します。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>ホーム</title>
</head>
<body>
    <h1>ログインに成功しました!</h1>
    <p>ようこそ、Spring Securityのサンプルページへ。</p>
</body>
</html>

これで、ログイン後に「ログイン成功メッセージ」が表示されるようになります。実際に画面が表示されると、ユーザー認証が成功していることが明確に確認できます。

ここまでで、Spring Securityでのログイン設定が完了し、独自のユーザー名とパスワードを使ってログインする動作確認もできるようになりました。

初心者の方でも、application.propertiesに設定を書くだけで、Spring Securityのユーザー認証が可能になるのはとても便利ですね。

このように、最小限の設定でセキュアなログイン認証が実現できるのが、Spring Securityの大きな魅力です。

5. 複数ユーザーを定義するには?

5. 複数ユーザーを定義するには?
5. 複数ユーザーを定義するには?

Spring Securityでは、application.propertiesで設定できるユーザーは基本的にひとつだけです。つまり、spring.security.user.nameで指定できるユーザーは一人分のみという制限があります。

では、複数のユーザーを設定したい場合はどうすればよいのでしょうか?その場合は、Javaの設定クラスを使って、複数のユーザーをプログラム上で定義する方法を取ります。

以下のようにSecurityConfigクラスを作成し、InMemoryUserDetailsManagerを使って複数のユーザーを登録します。


package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public InMemoryUserDetailsManager userDetailsService() {
        UserDetails user1 = User.withUsername("admin")
                .password("{noop}adminpass")
                .roles("ADMIN")
                .build();

        UserDetails user2 = User.withUsername("user")
                .password("{noop}userpass")
                .roles("USER")
                .build();

        return new InMemoryUserDetailsManager(user1, user2);
    }
}

この設定により、「admin / adminpass」と「user / userpass」の2つのアカウントでログインできるようになります。

Spring Securityで複数ユーザーを設定する場合は、application.propertiesではなくJavaクラスで管理する必要がある点に注意してください。

6. パスワードの暗号化設定と{noop}の意味

6. パスワードの暗号化設定と{noop}の意味
6. パスワードの暗号化設定と{noop}の意味

Spring Securityでは、パスワードを暗号化して扱うのが基本です。しかし、初心者向けの開発やテストの段階では、平文のパスワードを使用することもあります。

そのときに必要になるのが、{noop}という接頭辞です。これは「パスワードをそのまま使う(暗号化しない)」という意味です。

たとえば、次のように記述することで、パスワードが暗号化なしの平文で処理されるようになります。


UserDetails user = User.withUsername("sample")
    .password("{noop}samplepass")
    .roles("USER")
    .build();

このように{noop}をつけないと、Spring SecurityはデフォルトでBCryptなどの暗号化方式を使っていると判断し、次のようなエラーが発生します。


java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"

このエラーは「パスワードの形式が不明」という意味です。暗号化の種類を明示しないと、Spring Securityはどう扱ってよいかわからなくなるのです。

開発初期は{noop}を使って平文のまま設定し、後に{bcrypt}などを用いて安全性を高めていく流れが一般的です。

7. よくあるログインエラーと設定の反映漏れ

7. よくあるログインエラーと設定の反映漏れ
7. よくあるログインエラーと設定の反映漏れ

Spring Securityを使っていて初心者がよく遭遇する問題のひとつが、「ログインできない」という現象です。原因はさまざまですが、以下のようなパターンが多く見られます。

① パスワードに{noop}をつけ忘れた

先ほど解説したように、平文パスワードを使う場合は必ず{noop}をつけないとエラーになります。

② プロパティファイルが保存されていない

設定ファイルを編集した後、保存せずにアプリケーションを再起動すると、古い設定のまま起動されます。必ずCtrl+Sなどで保存してから起動しましょう。

③ ファイルの場所が間違っている

application.propertiesは必ずsrc/main/resources配下に配置する必要があります。別の場所に置くとSpring Bootは読み込みません。

④ キャッシュされた設定が反映されていない

IDE(Pleiades)で変更した設定が反映されないときは、プロジェクトをクリーン&ビルドしてから再実行してみましょう。

⑤ 画面遷移がない状態でログイン後に403エラーになる

認証後にアクセス先が設定されていないと、403 Forbiddenエラーになります。ログイン後に遷移させたいURLに対応する@ControllerとHTMLを正しく用意しておく必要があります。

以上のような点に注意すれば、Spring Securityのログイン設定エラーは避けやすくなります。少しずつ原因を切り分けていくことが大切です。

エラーメッセージをよく読み、表示されているキーワードで検索してみるのも有効です。Spring Securityは情報が豊富なので、エラー内容に対応した解決法も見つけやすいです。

コメント
コメント投稿は、ログインしてください

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

関連記事:
カテゴリの一覧へ
新着記事
オブジェクト指向とは?初心者向けにやさしく解説【Java入門】
Java の複数の引数を扱う方法を完全ガイド!カンマで区切る基本を初心者向けに解説
Java の void メソッドとは?戻り値がない場合の使い方を初心者向けに徹底解説
Javaのメソッドのメリットを完全解説!処理の整理と再利用で初心者でも読みやすいコードに
人気記事
No.1
Java&Spring記事人気No1
SQLのINSERT文を完全ガイド!初心者でもわかるデータの追加方法
No.2
Java&Spring記事人気No2
HTMLのセレクトボックス(プルダウン)の使い方を完全ガイド!selectとoptionの基本を覚えよう
No.3
Java&Spring記事人気No3
Modelとは?メソッド引数のModelの使い方を初心者向けに解説!
No.4
Java&Spring記事人気No4
SQLのサブクエリを完全ガイド!入れ子クエリの使い方を初心者向け解説