【Spring Security】デフォルトのユーザー名とパスワードの確認方法
新人
「Spring BootにSpring Securityを入れたら、いきなりログイン画面が出てきました。あれって何ですか?」
先輩
「それはSpring Securityの自動設定機能だよ。最初からセキュリティが有効になってるんだ。」
新人
「でも、ユーザー名やパスワードを設定してないのにログインを求められて困りました…」
先輩
「それも含めて、Spring Securityの基本動作を説明してあげるよ。」
1. Spring Securityとは何か
Spring Securityとは、Spring FrameworkでWebアプリケーションを開発する際に、ログイン認証やアクセス制御を簡単に実装できるようにするためのセキュリティフレームワークです。
例えば、ログインページを自動で表示させたり、ユーザーごとにアクセス権限を制御したり、フォーム認証やセッション管理を安全に行える仕組みがすでに用意されています。
Spring Bootプロジェクトにspring-boot-starter-securityを追加するだけで、アプリケーション全体にセキュリティがかかり、特別な設定をしなくてもログイン画面が自動生成されるのが特徴です。
また、CSRF対策やセッション固定攻撃の防止など、Webアプリケーションに必須のセキュリティ機能も最初から備わっています。
2. Spring Security導入直後のログイン画面とデフォルトユーザー
Spring Securityを導入して、Spring Bootアプリケーションを起動すると、初めてアクセスする際に自動でログイン画面が表示されます。
これは、明示的にログイン画面を設定していなくても、Spring SecurityがWebSecurityConfigurerAdapterの内部設定で、全てのURLに対して認証を要求しているためです。
このログイン画面では、ユーザー名とパスワードを入力するフォームが表示されますが、最初は自分で設定していないため、何を入れたらよいか迷うこともあるでしょう。
実は、ユーザー名はuserに固定されていて、パスワードはSpring Bootの起動時に自動的にコンソール上へ出力されるようになっています。
下記は、Spring Bootの起動時に表示されるログの一部です。
Using generated security password: 4f6d2a7b-e123-4c1a-9876-f7a89abc1234
このように、「Using generated security password:」という文のあとに表示されている文字列が、ログイン時に使用する一時的なデフォルトパスワードとなります。
このパスワードは、アプリケーションを起動するたびに自動的に生成されるため、毎回ログを確認する必要があります。
一方、ユーザー名は常にuserで変わりません。この情報でログインすることによって、アプリケーションのトップページやコントローラーにアクセスできるようになります。
実際にコントローラーを用意して試してみましょう。
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "index";
}
}
このコントローラーを定義し、index.htmlをresources/templatesに配置した状態でアプリケーションを起動し、http://localhost:8080にアクセスすると、最初にログイン画面が表示されます。
ここで、ユーザー名にはuser、パスワードには先ほどのログに表示された一時的なパスワードを入力すれば、ログイン後にページが表示されます。
この動作がSpring Securityの初期状態での基本的な仕組みです。
3. デフォルトのユーザー名とパスワードの出力場所
Spring Securityを導入すると、ログイン時に必要となるデフォルトのユーザー名とパスワードが自動的に設定されます。ユーザー名は常にuserですが、パスワードはSpring Bootアプリケーションの起動時に毎回ランダムに生成され、コンソールのログに出力されます。
この出力ログは、Spring Bootアプリケーションを起動した際のコンソールまたはターミナルの中に含まれており、起動プロセスの後半に表示されます。
特に、Pleiades環境で実行している場合は、「コンソール」ビューを開いて確認すると分かりやすいです。
このログを見逃すとログインできずに困ることになるため、起動時には必ずログを確認するようにしましょう。
4. ログ出力の実例
Spring Bootを実行すると、下記のようなログが表示されます。パスワードは毎回異なりますが、形式は共通しています。
...
Using generated security password: 8d43e7f2-cf1a-4a6f-84d1-9a7dc35f6123
...
このUsing generated security password:に続いて出力されている長い英数字が、一時的なデフォルトパスワードです。
このパスワードを使って、初回ログインを行うことができます。
ユーザー名は常にuserに固定されているので、起動後の初回ログイン時は次のように入力します。
- ユーザー名:
user - パスワード:ログに出力された文字列
なお、このログは毎回出力されるため、プロジェクトを再起動した場合は、再度ログを確認して新しいパスワードを取得する必要があります。
5. ログが表示されないときのトラブルと対処法
Spring Securityのデフォルトパスワードは、通常であればアプリケーション起動時にログ出力されますが、まれにログが表示されないケースもあります。ここでは、そうしたトラブルとその対処方法について紹介します。
ログレベルが不足している場合
Spring Bootは、ログの出力レベルによって、表示される内容が変わります。デフォルトではINFOレベルで出力されますが、明示的にログ設定をしている場合、ログレベルが低すぎると表示されないことがあります。
その場合は、application.propertiesに以下の設定を追加して、ログレベルを見直してみましょう。
logging.level.org.springframework.boot.autoconfigure.security=INFO
logging.level.org.springframework.security=INFO
これにより、Spring Security関連のログ出力が確実に表示されるようになります。
logback設定が影響している場合
プロジェクトにlogback-spring.xmlやlogback.xmlなどを用意していると、独自のログ出力設定が有効になって、Spring Securityのパスワード出力が非表示になってしまうことがあります。
この場合は、ログ出力に必要なorg.springframework.boot.autoconfigure.securityやorg.springframework.securityのログレベルが適切に設定されているか確認しましょう。
以下は、logback-spring.xmlでログレベルを指定する一例です。
<configuration>
<logger name="org.springframework.boot.autoconfigure.security" level="INFO" />
<logger name="org.springframework.security" level="INFO" />
</configuration>
このように設定しておけば、Spring Securityが出力するパスワード関連のログも確実に表示されるようになります。
IDEでのコンソール出力の確認漏れ
Pleiadesなどの統合開発環境(IDE)を使っている場合、「コンソール」ビューを閉じていたり、出力が途中で切れていたりすることがあります。
起動時にパスワードが出力されていないように見える場合は、まず「コンソール」タブを確認して、スクロールしてみることをおすすめします。
また、アプリケーションがクラッシュしていないかどうかも確認しましょう。起動エラーがあると、ログが途中で止まってしまい、パスワードの出力まで到達しないことがあります。
6. application.propertiesを使ってデフォルトユーザーやパスワードを変更する方法
Spring Securityの初期状態では、ユーザー名はuser、パスワードは毎回ランダムで生成される仕組みになっていますが、application.propertiesファイルを編集することで、独自のユーザー名とパスワードを設定することができます。
これにより、毎回ログを確認する手間を省くことができ、開発時の利便性が向上します。
設定方法はとてもシンプルで、下記のようにプロパティファイルに記述するだけです。
spring.security.user.name=testuser
spring.security.user.password=testpass123
上記の例では、ユーザー名をtestuser、パスワードをtestpass123に設定しています。この設定を保存してアプリケーションを再起動すれば、自動的にログインフォームの認証情報として反映されます。
ただし、この方法で設定したユーザー情報は、本番環境ではセキュリティ的に弱いため推奨されません。開発時や検証環境に限って利用しましょう。
また、パスワードはプレーンテキストで保存されるため、Gitなどのバージョン管理システムにファイルを登録する場合は取り扱いに注意してください。
7. よくある誤解・注意点
Spring Securityのデフォルト動作について、初心者がよく誤解しやすいポイントや、開発中に注意すべき点をまとめておきます。
アプリケーションを再起動するとパスワードが変わる
デフォルトのパスワードはアプリケーションの起動ごとに毎回ランダムで生成されるため、再起動のたびに異なるパスワードがログに出力されます。
一度ログインできたとしても、再起動後は前回のパスワードが使えなくなります。そのため、アプリを再起動した際には、必ず再度ログを確認して新しいパスワードを取得する必要があります。
ユーザー名は常に「user」で固定されている
Spring Securityのデフォルト設定では、ユーザー名は必ずuserとなっており、自動的にUserDetailsが生成されます。
そのため、ログ出力にユーザー名は表示されません。パスワードだけがコンソールに表示されます。
プロジェクトに複数の設定が混在すると競合が起こることがある
たとえば、application.propertiesでユーザー名やパスワードを明示的に指定しているにもかかわらず、ログにも「Using generated security password:」が出力されている場合、設定が正しく反映されていない可能性があります。
この場合は、プロジェクトのキャッシュや古いビルドファイルが影響していることがあるため、Pleiadesのプロジェクトをクリーンして再ビルドすると改善することがあります。
thymeleafテンプレートが表示されないのはログイン認証が通っていないから
テンプレートファイル(例:index.html)が存在しているのに画面が表示されない場合、ログイン認証が通っていない状態でアクセスしている可能性があります。
このようなときは、まずログインフォームに正しい情報を入力してログインしてから再度アクセスを試みてください。