Spring BootにSpring Securityを導入する方法【初心者向けガイド】
新人
「Spring Bootでログイン機能を付けたいのですが、どうやってセキュリティを設定すればいいんですか?」
先輩
「それならSpring Securityを使うのが定番だよ。Spring Bootに簡単に導入できるんだ。」
新人
「Spring Securityって何をしてくれるんですか?」
先輩
「認証と認可、つまり誰がログインしてきて、どの機能を使えるかを制御するための仕組みを提供してくれるんだよ。」
新人
「じゃあ、Pleiadesで作ったSpring Bootのプロジェクトでも簡単に導入できるんですか?」
先輩
「もちろん!Gradleを使っているなら、依存関係を追加するだけで使えるようになるよ。それじゃあ、まずはSpring Securityについて基本から学ぼう。」
1. Spring Securityとは?
Spring Securityとは、Javaアプリケーションにセキュリティ機能を追加するためのSpring公式ライブラリです。Spring Bootと組み合わせて使うことで、ログイン画面の表示やユーザー認証、アクセス制限などが簡単に実現できます。
特にWebアプリケーションでは、ログイン機能や管理画面へのアクセス制限など、セキュリティを考慮しなければならない場面が多くあります。Spring Securityを使えば、これらの処理を簡単に実装できます。
Spring Bootでは、Spring Securityの設定が自動化されており、依存関係を追加するだけで、デフォルトのログイン機能が使えるようになります。
2. 認証と認可の違いとは?
セキュリティの基本には認証(Authentication)と認可(Authorization)の2つがあります。
認証とは、「このユーザーは誰なのか」を確認することです。ログイン画面でユーザー名とパスワードを入力し、それが正しいかを確認する処理がこれにあたります。
認可とは、「このユーザーがこの機能を使っていいのか」を判断することです。例えば、管理者だけが使える画面にアクセスしようとしたときに、それを制限するのが認可です。
Spring Securityは、この認証と認可の両方をまとめて提供してくれる便利なライブラリです。
3. Spring Bootプロジェクトにセキュリティを追加する準備
それでは、実際にSpring BootのプロジェクトにSpring Securityを導入してみましょう。今回は、Pleiadesを使って開発環境を構築している前提で解説します。
まず、PleiadesでSpring Bootプロジェクトを作成するときに、Gradleをビルドツールとして選択してください。MavenではなくGradleを使用することが前提です。
プロジェクト作成時、Pleiadesの依存関係選択画面で「Spring Security」にチェックを入れておきましょう。
チェックを入れると、Gradleのビルドスクリプトに以下のような依存関係が追加されます。
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
}
これで、Spring Bootプロジェクトにセキュリティ機能を導入する準備が整いました。あとは、アプリケーションを起動するだけで、デフォルトのログイン画面が表示されるようになります。
なお、ログインページを表示するためのコントローラーは、@Controllerアノテーションを使って作成してください。@RestControllerはこの解説では使用しません。
次回は、デフォルトのログイン画面の確認や、ユーザーの設定方法について詳しく解説していきます。
4. PleiadesでSpring Securityの依存関係を追加する手順
Spring BootにSpring Securityを導入するためには、まず依存関係を正しく追加する必要があります。ここでは、Pleiadesを使ってSpring BootプロジェクトにSpring Securityの依存関係を追加する方法を丁寧に解説します。
まず、Pleiadesを起動し、「新規Springスタータープロジェクト」を作成してください。プロジェクト名やパッケージ名を入力し、Gradleをビルドツールとして選択します。ここでMavenを選ばないように注意してください。
次に表示される「依存関係の選択」画面では、「Spring Security」にチェックを入れてください。このチェックを入れることで、セキュリティ関連のライブラリがGradleのbuild.gradleファイルに自動で追加されます。
チェックを入れて完了すると、以下のような記述がGradleに含まれるようになります。
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
}
この依存関係が追加されていれば、Spring Bootのアプリケーションにデフォルトのセキュリティ機能が自動で組み込まれます。プロジェクトを保存して、ビルドエラーがないか確認してください。
5. デフォルトのログインフォームの動作確認
依存関係を追加したら、次は実際にアプリケーションを起動して、Spring Securityのログイン画面が表示されるかを確認してみましょう。
まず、Pleiadesの「実行」ボタンをクリックしてアプリケーションを起動します。ブラウザで以下のURLにアクセスしてください。
http://localhost:8080/
すると、次のようなログイン画面が表示されるはずです。
ユーザー名とパスワードを入力するフォームが自動で生成されていることに注目してください。これは、Spring Securityがデフォルトで提供しているログイン機能です。
ここで必要となる初期パスワードは、アプリケーション起動時のコンソールログに出力されています。以下のようなログ行を探してみましょう。
Using generated security password: 3a6f5d8e-xxxx-xxxx-xxxx-xxxxxxxxxxxx
このパスワードをコピーし、ユーザー名にはuserと入力してログインしてみてください。
ログインに成功すると、指定されたURLにそのままリダイレクトされ、アプリケーションの初期画面(エラーページや空白ページなど)が表示されます。
6. ログイン成功時・失敗時の遷移について簡単に説明
Spring Securityを導入すると、ログインの成否によって表示される画面が自動的に変化します。ここでは、ログイン成功時と失敗時の動作を確認してみましょう。
ログイン成功時には、ユーザーがアクセスしようとしていた元のページ(またはトップページ)にリダイレクトされます。Spring Bootの初期状態では、特別な画面は表示されませんが、セッションが開始されていることが確認できます。
一方、ログイン失敗時には、再びログイン画面が表示され、URLには?errorが付きます。例えば次のようなURLになります。
http://localhost:8080/login?error
このURLにアクセスすると、画面上部に「ログインに失敗しました」といったメッセージが表示されることがあります。
また、ログアウト処理も自動で有効になっており、次のURLにアクセスすることでログアウトすることができます。
http://localhost:8080/logout
このURLにアクセスすると、ログイン画面に戻され、セッションがクリアされます。
Spring Securityは、こうしたログインやログアウトの処理をすべて自動で提供してくれるため、初心者でもすぐに基本的な認証機能を利用することができます。
今後、独自のログイン画面やユーザー情報のカスタマイズを行うことで、より実用的なアプリケーションを作ることができるようになります。
7. セキュリティ設定をカスタマイズする基本(設定クラスの作成)
Spring Securityの基本機能は自動で有効になりますが、実際の業務アプリケーションでは、ログイン後の遷移先やアクセス制限のルールなどを自分で設定する必要があります。ここでは、Spring Securityの設定クラスを作成して、カスタマイズの基本を学びましょう。
設定クラスは、Javaのクラスとして作成し、@Configurationアノテーションと@EnableWebSecurityアノテーションを付けます。以下のようにシンプルな構成から始めてみましょう。
package com.example.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(authz -> authz
.requestMatchers("/login", "/public/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(form -> form
.loginPage("/login")
.defaultSuccessUrl("/home", true)
.permitAll()
)
.logout(logout -> logout
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout")
);
return http.build();
}
}
この設定では、/loginや/public/**のパスはログインなしでアクセス可能になっており、それ以外のURLはログインしないとアクセスできません。ログイン成功後には/homeにリダイレクトされるように設定しています。
8. 特定のURLにログイン制限をかける方法(@Controllerでの例)
ログインしないとアクセスできないURLを指定するには、先ほどの設定クラスでURLごとのアクセスルールを定義しました。ここでは、実際に@Controllerを使ってログイン後に表示するページと、誰でも見られるページを分けてみましょう。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class PageController {
@GetMapping("/login")
public String login() {
return "login";
}
@GetMapping("/home")
public String home() {
return "home";
}
@GetMapping("/public/info")
public String publicPage() {
return "info";
}
}
このコントローラーでは、/loginと/public/infoはログインなしでアクセス可能にし、/homeはログイン後でないと表示できないように制限をかけています。
このように、URLとアクセス制限をコントロールすることで、管理者画面や会員ページなどを安全に提供できるようになります。
なお、画面に表示するテンプレート(login.htmlやhome.htmlなど)は、resources/templatesフォルダに設置して、Thymeleafなどで作成してください。
9. Spring Securityを導入するメリットと次に学ぶべきこと
ここまでで、Spring BootにSpring Securityを導入し、基本的なセキュリティ設定を行う方法を学びました。デフォルトのログイン画面だけでなく、自分でURLごとの制限やログイン後の遷移先を自由に設定できるようになりました。
Spring Securityを導入する最大のメリットは、ログイン・ログアウト・アクセス制限といった機能を、簡単な設定で安全に実装できる点にあります。セキュリティは複雑で難しいイメージがありますが、Spring Securityを使えば最低限のコードで基本的な機能を実装できます。
次に学ぶべきこととしては、以下のようなトピックがあります。
- 独自のログイン画面の作成方法(HTMLフォームをカスタマイズ)
- ログインユーザーの情報を取得して表示する方法
- ユーザーごとにアクセスできる画面を制限するロールベースの認可
- ログイン失敗時やログアウト後の表示を変更するカスタマイズ
これらを学んでいくことで、より実用的なWebアプリケーションを構築できるようになります。
Spring BootとSpring Securityの連携はとても強力なので、今回のように少しずつカスタマイズを進めていくことで、初心者でも安心してセキュリティのあるアプリケーションを開発できるようになります。
まとめ
Spring BootとSpring Securityの全体像を整理しよう
Spring BootにSpring Securityを導入する流れを振り返ると、まず最初に理解すべきなのは「認証」と「認可」という二つの重要な概念です。認証はユーザーが誰であるかを確認する工程であり、認可はそのユーザーがどの機能やページにアクセスしてよいかを判断する工程です。この二つの仕組みを適切に扱うことが、安心して利用できるWebアプリケーションを構築するための土台になります。とくに企業向けの管理画面や会員向けのサービスでは、ユーザー情報の保護が非常に重要となるため、Spring Securityのような信頼性の高いフレームワークを利用することが推奨されます。
さらに、Spring BootはSpring Securityの設定を自動化する仕組みを提供しているため、依存関係を追加するだけでログイン認証が有効になるという大きな利点があります。Pleiadesを利用したJava開発環境では、Gradleを選択し、依存関係にspring-boot-starter-securityを追加するだけで、初期設定が整います。これは初心者にとって非常に扱いやすく、セキュリティ周りの複雑なコードを書く前に、まずは仕組みを理解しながらアプリケーションを動かすことができます。
実装のイメージを確認できるサンプル
Spring Securityの基礎設定では、コントローラークラスを作成してログイン画面やトップページを表示することが一般的です。ログイン画面をカスタマイズしたい場合や、特定のURLパスにアクセス制限を追加したい場合は、Javaコードでセキュリティ設定クラスを作成し、フィルタの設定や認証方法を定義します。ここでは簡単な例として、Spring Bootのプロジェクト構造に合わせたクラスのイメージを示します。
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests(auth -> auth
.requestMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
)
.formLogin(login -> login
.loginPage("/login")
.permitAll()
);
return http.build();
}
}
上記のような設定により、特定パスへのアクセス制限やログインページの指定など、Webアプリケーションに必要なセキュリティ仕様をコントロールできます。Spring Securityは細かな設定を追加することでより強固な安全性を確保でき、実案件でも広く利用されています。初心者のうちは最初から複雑な設定に踏み込まず、基本設定を理解しながら徐々にカスタマイズしていくことが望ましいでしょう。
セキュリティの学習で身につく力
今回学んだ内容を整理すると、Spring Securityの役割、認証と認可の違い、Gradleを使った依存関係の追加方法、そしてPleiadesによるSpring Bootプロジェクトの準備が主要なポイントとなります。これらを理解することで、Webアプリケーションを扱ううえで必要不可欠なセキュリティ知識が身につきます。また、今後ログイン画面のカスタマイズやデータベース連携を行う際にも、今回の知識が基礎となります。
Spring BootとSpring SecurityはJava開発の中でも特に人気が高く、実践的な場面で広く使われています。今回の基礎を確実に理解しておくことで、アプリケーション開発の幅が大きく広がり、より高度な機能にも挑戦できるようになります。今後の学習では、ユーザーデータの管理やパスワードのハッシュ化、ログイン後の画面遷移など、少しずつステップアップしながら身につけていくのが良いでしょう。
生徒:「Spring Securityの導入って難しいと思っていたけれど、依存関係を追加するだけでログイン画面が動くのには驚きました。」
先生:「そうだね。Spring Bootの自動設定が助けてくれるおかげで、初心者でも簡単にセキュリティを試せるんだよ。」
生徒:「認証と認可の違いもよく理解できました。役割によってアクセスを制限できるのは便利ですね。」
先生:「実際のアプリケーションではとても重要になるポイントだよ。管理者専用ページなどを作るときには必須になるんだ。」
生徒:「今後はログインページのデザインも変えてみたいですし、ユーザー情報もデータベースで管理してみたいです。」
先生:「その意欲が大切だよ。今日の知識がしっかり身についていれば、次のステップもきっとスムーズに進めるはずだよ。」