Spring Securityで独自ユーザー名とパスワードを設定する方法【初心者向け】
新人
「Spring Securityを使ってログイン画面を作ろうと思うんですが、勝手にユーザー名とかパスワードが出てくるんですけど…あれってなんですか?」
先輩
「ああ、それはSpring Securityが自動的に用意してくれるデフォルトのユーザー名とパスワードなんだよ。」
新人
「なるほど…。でも、自分の好きなユーザー名とかパスワードにはできないんですか?」
先輩
「もちろんできるよ!じゃあ、今回はSpring Securityで独自のユーザー名とパスワードを設定する方法を、初歩から説明していこうか。」
1. Spring Securityが自動で生成するユーザー名とパスワードとは?
Spring Securityをプロジェクトに導入すると、特に何も設定をしなくても自動的にログイン認証が有効になります。これはSpring Securityが持っている「セキュリティの初期構成」によるもので、標準でログイン画面が表示されます。
その際、自動的に生成されたユーザー名とパスワードがコンソールに表示され、これを使えばログインできるようになります。
例えば、アプリケーションを起動すると、以下のようなメッセージが表示されます。
Using generated security password: 1a2b3c4d-5e6f-7g8h-9i0j-k1l2m3n4o5p6
このときのユーザー名はuserで、パスワードは起動のたびに違うランダムな文字列が生成されます。
これにより、Spring Securityがきちんと動作していることをすぐに確認できます。ただし、毎回違うパスワードでは実用的ではないため、独自のユーザー名とパスワードを設定したくなりますよね。
2. なぜ独自のユーザー名やパスワードを設定する必要があるのか?
Spring Securityの初期設定は開発やテストには便利ですが、実際の業務システムではユーザーごとの認証情報を管理する必要があります。例えば、以下のような理由があります。
- 毎回パスワードが変わるとテストがしづらい
- 固定のユーザー名・パスワードでログインしたい
- 複数ユーザーのログイン認証を実装したい
- 本番環境ではセキュリティ上、自動生成のパスワードは使えない
そのため、独自のユーザー名とパスワードをapplication.propertiesやapplication.ymlに設定しておくのが一般的です。
例えば、次のようにプロパティファイルに書くことで、固定のユーザー情報を使ったログインが可能になります。
spring.security.user.name=admin
spring.security.user.password=secret123
これを設定しておくと、アプリケーション起動後にadmin / secret123でログインできます。
なお、Spring Securityでは暗号化されたパスワードを使うのが推奨ですが、開発段階では平文での設定も許容されています。
この設定を行えば、毎回ランダムなパスワードを確認する手間がなくなり、チームで共有するテスト用アカウントも管理しやすくなります。
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のログイン画面の挙動
設定ファイルを保存してアプリケーションを再起動した後、ブラウザで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. 複数ユーザーを定義するには?
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}の意味
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. よくあるログインエラーと設定の反映漏れ
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は情報が豊富なので、エラー内容に対応した解決法も見つけやすいです。